1

スレッドを呼び出すための JButton があります。しかし、私が実際にやりたいのは、1 分後にスレッドを停止することです! 私のactionListenerメソッドは次のとおりです。

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    new Frame2().setVisible(true);
    Thread t=new Thread(new Frame2());

    t.start();
    }    

1分間だけ実行する私のスレッドは次のとおりです。

    public void run(){
    int i;
    while(!Thread.currentThread().isInterrupted()){
        for(i=0;i<=100;i++){

            if(i==100){
            Thread.currentThread().interrupt();
             }
        try {
            Thread.currentThread().sleep(600);
        } catch (InterruptedException ex) {
            System.out.print("THREAD CLOSED");
           return;
        }

    }
        System.out.print("DOING THINGS BLA BLA");
    }

}    

問題: 1 分後にスレッドを正常に停止しましたが、目的の操作を実行できませんでした。スレッドを1分間だけ実行し、スレッド内で自分のことをしたいために、どうすればこれを達成できるかを知りたいだけです! しかし、どのように?このアプローチは間違っていますか?はいの場合、正しいアプローチは何ですか?

4

2 に答える 2

4

あなたが望むことをする最も簡単な方法は、次のようなものを持つことです:

public void run() {
    long startTime = System.currentTimeMillis();
    while (System.currentTimeMillis() < startTime + 60000) {
        // do something useful
    }
}

「役に立つことをする」は高速な操作である必要があり、スレッドは常に 1 分よりわずかに長く続きます (1 分 + 「役に立つことをする」時間)。

元のコードについて注意してください。スレッド自体からスレッドを停止するには、割り込みは必要ありませんrun()。メソッドから戻るだけです。

于 2013-05-09T06:41:38.217 に答える