問題文: -
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
}
}
}
}