-1

DataThreadThread から継承したクラスが 1 つあります。DataThreadと の 2 つのオブジェクトReadThreadを使用していますWriteThread。実行中の別のスレッドがMain_GUIあります。

ボタンを押すmain_GUIとメソッドが呼び出されx.method1()、このメソッドは WriteThread メソッド WriteThread.sleepForReset() を使用します。の

public void sleepForReset(){
    try {
        sleep(28000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

GUIのボタンを押すと、ミリ秒main_GUI停止し28000ます。スリープをオンにしているWriteThread場合、なぜそれが停止するのmain_GUIですか? スリープが静的メソッドだからですか?はいの場合、誰かWriteThreadに影響を与えずに眠る方法を提案できMain_GUIますか?

4

3 に答える 3

6

WriteThread.sleepForReset()メソッド内から呼び出している場合actionPerformedは、実際には EventDispatch スレッド内から呼び出しています。WriteThread を表すオブジェクトがあっても、EventDispatch Thread 内からそのオブジェクトのメソッドを呼び出すと、EDT 内でプロセスが実行されます。

Java でワーカー スレッドを使用する方法については、このチュートリアルをご覧ください。から継承するクラスを持つだけでは不十分であることに注意してくださいThread。マルチスレッド アプリを使用するには、これらのスレッドのインスタンスを開始する必要があります。提供されているチュートリアルでは、開始するための 1 つの方法について良いアイデアが得られます。

于 2010-01-08T03:07:37.617 に答える
1

Geeks に電話することは、必ずしも助けを得る良い方法ではないと思いますが、質問に答えると、イベント ディスパッチ スレッドで Thread.sleep を呼び出しているため、睡眠が表示されます。Swing の GUI 操作は、この単一のスレッドで実行されます。バックグラウンドで長時間実行する必要がある場合は、SwingWorker に委任する必要があります。

また、中断された例外の処理はあまり堅牢ではありません。少なくとも、Thread.currentThread().interrupt() でスレッドを再中断する必要があります。

于 2010-01-08T03:06:48.617 に答える
-1

さまざまなオプションを提案してくれてありがとう..... しかし、私は TimeTask.schedule() を使用して動作しました。現在のスレッドでスリープを使用する代わりに、後でジョブをスケジュールしました......

于 2010-01-08T05:41:48.930 に答える