我的actionListener出了问题。 在我点击按钮之前,似乎actionListener会自动运行? 在单击按钮之前,“在控制台中出现”这不应出现在控制台中“,这很奇怪。
....
button1.addActionListener(this);
button2.addActionListener(this);
....
public void actionPerformed(ActionEvent e) {
System.out.println("This should not appear in the console before button click");
if (e.getSource()==button1)
System.out.println ("answer1");
else if (e.getSource()==button2)
System.out.println ("answer2");
.....
}
答案 0 :(得分:5)
您可以通过调用Thread.dumpStack()
来确定调用方法的位置。这会将堆栈跟踪打印到错误流(可能是Java控制台)。或者使用调试器并在方法的第一行放置一个断点。
public void actionPerformed(ActionEvent e) {
Thread.duumpStack();
System.out.println("This should not appear in the console before button click");
...
顺便说一句:我建议不要使用EventObject.getSource
。而是为每个动作添加一个新的侦听器。
所以你的示例代码将成为:
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("answer1");
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("answer2");
}
});
不幸的是,与匿名内部类相关联的样板文件明显冗长,但意图更清晰。
答案 1 :(得分:0)
另外,请确保在单击任一按钮之前未将“this”作为ActionListener添加到可能使用的任何其他组件中。您还可以在代码中搜索doClick()调用,以确保不以编程方式调用它。