因此,这确实很烦人,并且同时进行了令人难以置信的魔术表演。因此,我有一个名为setAnagram
的全局字符串。我正在用Eclipse创建GUI,因此我想做的是让用户单击一个按钮,它启动另一个线程,并在该线程上获取文本字段的值。我这样做的方法是将setAnagram
设置为文本字段的值。
但是,这实际上不起作用,并且setAnagram
具有空白值(“”)。因此,我想好了,如果将变量设置为null
,该怎么办。好吧,我得到了NullPointerException。
我想很好,如果变量实际上没有更改,并且在可以更改变量之前启动了线程,该怎么办?好吧,我做到了,所以您一次按下按钮并对其进行更改,然后再次按下它,然后启动线程。这是奇怪的东西出现的地方。更改后,我在第一次单击按钮时打印出setAnagram
的值。但是,当我在单击下一个按钮时启动线程时,它又回到了初始化时的状态(“测试”)。这是按钮单击的代码:
decodeAnagramButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (buttonPresses == 0) {
setAnagram = chosenAnagram.getText(); // chosenAnagram is the text field
buttonPresses++;
decodeAnagramButton.setText("Click again");
System.out.println(setAnagram); // These two lines output the same thing
System.out.println(chosenAnagram.getText());
}
else {
titleText.setText("Decoding anagram...");
decodeAnagramButton.setVisible(false);
MainWindow thread = new MainWindow();
thread.start();
}
}
});
然后为了最小化,我不会添加线程代码,因为它有点长,只知道对
setAnagram
所做的就是获取值。关于为什么这种情况发生意外变化的任何想法? 最佳答案
MainWindow thread = new MainWindow();
thread.start();
所以...您创建了
MainWindow
的新实例(显然是线程?!?)。这意味着MainWindow
的新实例也有其自己的setAnagram
成员变量,对吗?尝试在这两行代码之间添加
thread.setAnagram = this.setAnagram;
。(此外,关于您的设计的一些气味令人讨厌,为什么您的主窗口是螺纹?)