この例では、JButtonにActionListenerが関連付けられた単純なJFrameがあります。このAcitonListenerは、プログラムが完了できるようにするブール値フラグを変更するだけです。私はJavaでwhileループを実行しても、本体がない場合は条件をチェックしませんか?
while(!flag[0]){
System.out.println("I should do nothing. I am just a print statement.");
}
この作品を読むためにwhileループを変更した場合
public class Test {
public static void main(String[] args){
final boolean[] flag = new boolean[1];
flag[0] = false;
JFrame myFrame = new JFrame("Test");
JButton myButton = new JButton("Click Me!");
myButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Button was clicked!");
flag[0] = true;
}
});
myFrame.add(myButton);
myFrame.setSize(128,128);
myFrame.setVisible(true);
System.out.println("Waiting");
while(!flag[0]){}
System.out.println("Finished");
}
}
"完了" これは決して印刷物、およびボタンを1回クリックされた後は、しかし
Waiting
Button was clicked!
を印刷します!私はおそらくこれを理解
Waiting
I should do nothing. I am just a print statement.
I should do nothing. I am just a print statement.
....
I should do nothing. I am just a print statement.
Button was clicked!
Finished
のようにプリントアウトが見える行動を待つための適切な方法ではありませんが、それにもかかわらず、私は、Javaがこのように動作理由を知ることに興味を持っています。
このhttp://docs.oracle.com/javase/tutorial/uiswing/concurrency/を見てください – 3kings