我正在创建某种菜单(摆动中),这是我的代码
public class JavaApplication5
{
public static void main(String[] args)
{
NewJFrame frame = new NewJFrame();
frame.setVisible(true);
if(frame.getRunning() == true)
{
System.out.println("why it doesn't work");
}
}
}
这是我的菜单类:
public class NewJFrame extends javax.swing.JFrame
{
public boolean isRunning = false;
public void setRunning(boolean isRunning)
{
this.isRunning = isRunning;
}
public boolean getRunning()
{
return isRunning;
}
public NewJFrame()
{
initComponents(); //this refers to auto-generated code by swing library
}
//some swing stuff...
private void PlayActionPerformed(java.awt.event.ActionEvent evt) {
this.setRunning(true);
System.out.println(getRunning());
}
}
输出是每当我单击“播放”按钮时: “真正 真正 是”
在这里,我的问题浮出水面:如果将值从false更改为true(通过按按钮),为什么在输出的控制台中不显示以下行“为什么不起作用”?如何在主函数中调用不断变化的变量?预先感谢。
答案 0 :(得分:2)
您的应用程序不会被阻止。它将JFrame设置为可见(即显示窗口),然后立即检查是否为frame.getRunning() == true
。在评估条件之前,按下按钮的可能性绝对为零。
NewJFrame frame = new NewJFrame();
frame.setVisible(true);
// you're assuming the application waits here, but it does not
if(frame.getRunning() == true)
{
System.out.println("why it doesn't work");
}
解决此问题的方法是使用同步辅助程序(可能是CountDownLatch
),它将阻止您的主线程,或者重新考虑程序中发生的事件的顺序。也许您应该注册一个侦听器/回调。