如何从不断变化的变量中获得价值

时间:2018-08-01 07:47:30

标签: java swing parameter-passing actionlistener

我正在创建某种菜单(摆动中),这是我的代码

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(通过按按钮),为什么在输出的控制台中不显示以下行“为什么不起作用”?如何在主函数中调用不断变化的变量?预先感谢。

1 个答案:

答案 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),它将阻止您的主线程,或者重新考虑程序中发生的事件的顺序。也许您应该注册一个侦听器/回调。