0

ボタンを使用して、アプリでバックグラウンド サービスを開始しています。これは私が使用しているコードです:

@Override
public void actionPerformed(ActionEvent action) {
    if (action.getActionCommand().equals("Start")) {
        while (true) {
            new Thread(new Runnable() {
                public void run() {
                    System.out.println("Started");
                }
            }).start();

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

これは毎秒サービスを更新します。これは私が望むものです。問題は、アプリケーションの残りの部分がフリーズすることです。それが起こらないように実装するにはどうすればよいですか?

4

4 に答える 4

1

次の場合、アプリケーションが一時停止する可能性があります。

    while (true) {
        ...
    }

それらの行を削除してみてください。

編集:コメントに従って、新しく起動されたスレッドを毎秒起動するには、run()メソッド内でsleepとwhileループを移動します。

if (action.getActionCommand().equals("Start")) {
    new Thread(new Runnable() {
        public void run() {
            while (true) {
                System.out.println("Started");        }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
       }
   }).start();
}
于 2013-02-11T12:50:18.070 に答える
0

GUIを更新するスレッドでこのメソッドを呼び出しており、これによりGUIの更新が一時停止しています。新しいスレッドを生成し、そこで実行します。

于 2013-02-11T12:51:26.027 に答える
0

はい、分かりました。これが私がすべきことです:

@Override
public void actionPerformed(ActionEvent action) {
    if (action.getActionCommand().equals("Start")) {
        new Thread(new Runnable() {
            public void run() {
                while (true) {
                    System.out.println("Started");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}
于 2013-02-11T15:02:44.320 に答える
0

無限ループ?? while (true) {.....}

ここから抜け出す方法-ループ内にprintステートメントを追加すると、ボタンをクリックした後、ここで立ち往生していることがわかります

于 2013-02-11T12:54:39.717 に答える