忍者ブログ
[18]  [17]  [16]  [15]  [14]  [13
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

時間のかかる処理を実行しているときに応答なしになっちゃうのが嫌だったのでプログレスバーを表示しよう。

ってことでUrumaで進捗状況を表示するためのプログレスバーを早速トライ。

public class MainAction {
    public ProgressBar progress;

   @EventListener(id = "button")
    public void clickButton() {
        for( int i = 0; i < 100; i++ ){
            //時間のかかる処理
            this.progress.setSelection(i);
        }
    }
}

これでいけるだろうって思って実行したらボタンをクリックしたときの処理が短ければ(5秒~10秒?)問題なくできるんだけど、時間がかかると応答なしになってプログレスバーが動かなくなってしまいます。

そこでいろいろ調べた結果やっぱりスレッドを使わないといけないらしい。

スレッドなんてほとんどやってなかった(Javaを勉強し始めたころにちょこっとやっただけ)ので書き方がよくわからん^^;

ちょうどいいのないかなーって調べたらSWTで似たようなことやってるのを発見><b

で、真似てみた。

public class MainAction {
    public ProgressBar progress;
    public Shell shell;

   @EventListener(id = "button")
    public void clickButton() {
        for( int i = 0; i < 100; i++ ){
            //時間のかかる処理
            this.progress.setSelection(i);
        }
    }

    public void OriginalThread imprements Runtime{
        private int index = 0;

        public void run() {
            for( index = 0; index < 100; index++ ) {
                //時間のかかる処理
                shell.getDisplay.asyncExec(new Runtime() {
                    public void run() {
                        progress.setSelection(index);
                    }
                });
            }
        }
    }
}

コレで実行したらちゃんと動いたw

まぁshell.getDisp・・・のrun()に最初時間のかかる処理書いて最初みたいに応答なしになったけどね^^;

shell.getDisplay.asyncExec(new Runtime() {
    public void run() {
        progress.setSelection(index);
    }
 });

のprogress.setSelection(index);には時間のかかる処理は書いてはいけません。(書いてもいいけど意味ないしね)
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
 | HOME |  UnicodeDecodeError >>
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
ブログ内検索
忍者ブログ [PR]

Graphics by Lame Tea / designed by 26℃