JButton 不改变字段值
JButton does not change a field value
我遇到了一个简单的 JFrame 应用程序的奇怪问题,该应用程序只有一个按钮来更改字段值。当我尝试调试我的应用程序时,它工作正常,但是当我尝试 运行 它时,它不起作用并卡在 while 循环中。
这是我的图形 class:
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 无响应;要克服,一种简单的方法是在循环内添加睡眠时间:
while (true) {
Thread.sleep(250); // sleep for 250 msecs
if (t.get())
break;
}
无论如何这只是一个例子,并不是真正的解决方案;更好的方法是将您的主要 class 注册为 listener, or running the loop in a separated thread.
我遇到了一个简单的 JFrame 应用程序的奇怪问题,该应用程序只有一个按钮来更改字段值。当我尝试调试我的应用程序时,它工作正常,但是当我尝试 运行 它时,它不起作用并卡在 while 循环中。 这是我的图形 class:
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 无响应;要克服,一种简单的方法是在循环内添加睡眠时间:
while (true) {
Thread.sleep(250); // sleep for 250 msecs
if (t.get())
break;
}
无论如何这只是一个例子,并不是真正的解决方案;更好的方法是将您的主要 class 注册为 listener, or running the loop in a separated thread.