java - JButton 不更改字段值

标签 java swing jframe jbutton actionlistener

我在一个简单的 JFrame 应用程序中遇到了一个奇怪的问题,该应用程序只有一个按钮来更改字段值。当我尝试调试我的应用程序时,它工作正常,但是当我尝试运行它时,它不起作用并陷入 while 循环中。 这是我的图形类:

public class Test extends JFrame implements ActionListener
{
    private static final long serialVersionUID = 1L;
    private boolean connectPressed;
    public JButton btnConnect;
    public Test()
    {
        JPanel p = new JPanel();
        p.setLayout(null);

        // connect button
        btnConnect = new JButton("connect");
        btnConnect.setBounds(0, 0, 100, 20);
        p.add(btnConnect);
        btnConnect.addActionListener(this);     


        getContentPane().add(p);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Client");
        setSize(200,200);
        setVisible(true);
    }

    public boolean get()
    {
        //System.out.println(connectPressed);
        return connectPressed;
    }

    public void set(boolean b)
    {
        connectPressed = b;
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        //e.getActionCommand();
        connectPressed = true;
        System.out.println(connectPressed);
    }

}

这是我的应用程序测试代码:

public class Test2
{
    public static void main(String[] args)
    {
        System.out.println("Hello");
        Test t = new Test();

        t.set(false);
        while (true)
        {
            if ((t.get()))
                break;              
        }
        System.out.println("Bye");

    }

}

谁能帮我解决这个问题吗?

最佳答案

当您运行此命令时:

while (true) {
    if ((t.get()))
        break;              
}

线程会吃掉所有CPU,导致UI无响应;要克服这一问题,一种简单的方法是在循环内添加 sleep 时间:

while (true) {
    Thread.sleep(250); // sleep for 250 msecs
    if (t.get())
        break;              
}

无论如何,这只是一个示例,并不是真正的解决方案;更好的方法是将您的主类注册为 listener ,或在 separated thread 中运行循环.

关于java - JButton 不更改字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862175/

相关文章:

java - Aspose 幻灯片数据标签在 'Area Chart' 中重叠

java - 褪色 sample

java - 隐藏 JInternalFrame 的标题栏? -java

java - 如何用一定范围内的随机值填充 int 数组,并且每个值恰好有一个重复项?

java - JPanel 中的 GridBagLayout,组件不改变 x || y 位置

java - 类声明中的泛型

java - NoSuchElementException 问题

java - 如何对 web.xml 中的/* url-pattern 进行异常(exception)处理?

java - 通过使用 netbeans 单击 jbutton 将带有行的 jbutton 添加到 jtable 中

java - JInternalFrame 的单个实例