0

問題文: -

UIボタン「実行」があります。これは、別のスレッドでループ内の大きなバックグラウンドプロセスを順番に開始します。プロセスが開始されるとすぐに、ボタンのテキストが「一時停止」に切り替わります。「一時停止」を押すと、スレッドの実行を一時停止する必要があり、「再開」が最終的に先に進むように通知します。

ボタンを押すと「実行」、スレッドが開始され、ボタンが「一時停止」に切り替わり、一時停止を押すとスレッドが中断されます。しかし、実行中のスレッドを再開できません。再開ボタンを押すイベントでスレッドの状態を確認すると、NONeと同等のvalue=0を取得します。助けてください。以下は私のコードです...

ブロッククォート

performBButton.addSelectionListener(new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Button btnToggle = (Button) e.getSource();
            MyJob myJob = new MyJob();
            if (btnToggle.getText().equalsIgnoreCase("Perform")) {
                btnToggle.setText("Pause");
                myJob.schedule();

            }
            else if (btnToggle.getText().equals("Pause")) {
                buttonToggle.setText("Resume");
                isPaused=!isPaused;
            }
            else if (btnToggle.getText().equals("Resume")) {
                buttonToggle.setText("Pause");
                isPaused=!isPaused;
                synchronized (myJob) {
                    myJob.notify();
                  }
            }
        }
    });

class MYJob extends Job{
   public void run(IProgessMonito monitor) {
       @Override
       public void run() {
           for (int i=0;i<50000;i++) {
               System.out.println("Iteration "+i +isPaused);
                    synchronized (this) {
                        if (isPaused) {                               
                                wait();
                            } 
                        }
                    }
         Thread.sleep(1000);//I have removed try catch while pasting here

    }
}
}
}
4

1 に答える 1

0

wait()をmyThread.wait()に変更すると、myThreadをグローバルに宣言することで、実際に問題が解決しました。しかし、それは正しい方法ではありません、それ以上の提案は役に立ちます...

于 2012-07-01T09:54:16.823 に答える