2

ビデオ コンバーターには、ビデオのトランスコードを担当するスレッドがあります。user threadとのことですsetDaemon(false)

停止するためにメソッドを呼び出しますが、threadName.interrupt()停止しません。続きます!
どうすれば止められますか?
これが私がそれを止めようとする方法です:

if(getExecutingTaskID() == taskID){
         int what = JOptionPane.showOptionDialog(frame, 
                    "Do you want to interrupt an executing task?", 
                    "Task already running", 
                    JOptionPane.YES_NO_OPTION, 
                    JOptionPane.QUESTION_MESSAGE, 
                    null, null, null);
         if(what == JOptionPane.YES_OPTION){
             if(getExecutingTaskID() == taskID){
                 converter.interrupt();
             }
             return true;
         }
        }
        return false;
    }
4

3 に答える 3

4

InterruptedExceptionスレッドは、スローするメソッドを呼び出す場合、またはメソッドを呼び出しThread.interruptedてそれに応答するようにコード化されている場合にのみ中断できます。いつでもスレッドを中断できるようにしたい場合は、それをコード自体に組み込む必要があります。Oracle はチュートリアルを提供しています。基本的に、オプションは、または のInterruptedExcetionようにスローするメソッドを使用するsleepwait、 を定期的に呼び出すか、定期的Thread.interruptedにチェックする独自の stop 変数を使用することです。

どのようにスライスしても、割り込みを実装する必要があります。Java には、メッセージをスレッドに送る簡単な方法がいくつかあります。

というThread.stop方法もありますが、この方法は非常に危険とされています。これにより、スレッドが停止し、すべてのロックがすぐに解放されます。これにより、オブジェクトが使用できない状態になる可能性があります。それを使用することは、一般的に悪い考えです。

(回答を大幅に改訂して申し訳ありません。)

于 2013-05-25T06:08:40.283 に答える