0
これは私のプログラムです。私は理解していません、なぜbtnStopの2番目のActionListenerが動作しません。私は、btnStartでwhileループを開始します。しかし、私はそれを止めることはできません。誰かがなぜ私を説明することができますか?最初のActionListenerがまだビジー状態の場合は、2番目のActionListenerをアクティブにする方法は?
パブリッククラスActionFrame読むthe tutorial on Swing concurrencyのJFrame {
JButton btnStart = new JButton("Start");
JButton btnStop = new JButton("Stop");
boolean flag = false;
public ActionFrame() {
setLayout(new FlowLayout());
setSize(600, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
add(btnStart);
add(btnStop);
btnStart.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
flag = true;
System.out.println("Start waitForFlag()");
waitForFlag();
}
});
btnStop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
flag = false;
}
});
}
public void waitForFlag() {
while (flag) {
try {
Thread.sleep(500);
System.out.println("Test");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
あなたは2人のリスナーでこれを複雑にしているようです。 1つのリスナーを持ち、外部変数を設定/参照して、どのようなアクションを取るべきかを判断するのがベストです。例えば、変数は時間です。 また、バックグラウンドスレッドについても読んでください。単にフラグを変更してもスレッドは中断されません。 – saywhatnow