我正在编写 aJToggleButton
以从内存中加载/丢弃元素的配置(望远镜配置),因此我在 a 中添加了JComboBox
aJFrame
并在其附近添加了按钮以加载所选项目。选择时JToggleButton
,会显示一个硬盘图标,否则显示另一个图标。为此,我正在使用 IntelliJ IDEA GUI 编辑器。当然,我已经向该ItemListener
按钮添加了一个(如网络建议):
loadTelescopeButton.setSelected(true);
System.out.println(loadTelescopeButton.isSelected());
loadTelescopeButton.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("LAODACTION " + loadTelescopeButton.isSelected());
try {
if (e.getStateChange() == ItemEvent.SELECTED) {
String selected = telescopesList.getSelectedItem().toString();
if ((selected != null) && (!selected.equals("")) && (ObjUtils.isAlphaNumeric(selected))) {
//...
} else {
showErrorMessage("Invalid id selected!");
}
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
if ((configurationActivity != null) && (configurationActivity.getManager() != null) &&
(configurationActivity.getTelescope() != null) && (configurationActivity.getTelescope().isConnected())) {
//...
} else {
//...
}
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
输出:
true
->显示窗口时
LAOD_ACTION false
->单击按钮时
我用一些新的切换按钮做了一些测试,它们给了我同样的错误:里面的代码itemStateChanged(ItemEvent e) {...}
永远重复,没有停止!在那段代码中没有for
和while
循环!结果是大量的消息对话框(应该只显示一个对话框),如果我在桌面上聚焦另一个窗口,对话框后面的屏幕变成黑色(父窗口的区域)。我将侦听器更改为ActionListener
,现在一切都执行一次/单击。
为什么会出现这个错误?如您所见,我已从https://stackoverflow.com/a/7524627/6267019复制了该代码。
GitHub 上的完整代码 在这里,我突出显示了该切换按钮的代码。我的文件中的其他JToggleButton
s也会发生相同的错误MainActivity.java
,并且在调试 IntelliJ 时,我可以看到侦听器中的代码永远重复。经过数千次对话后,Windows 向我显示一条消息并关闭 Java Platform Binary 并出现错误。
编辑:
新课程中的同样问题:
import javax.swing.*;
import java.awt.*;
public class ErrorGUI extends JFrame {
public ErrorGUI() throws HeadlessException {
super("ciao");
JPanel panel1 = new JPanel();
setContentPane(panel1);
JToggleButton ciaoToggleButton = new JToggleButton("cajs");
ciaoToggleButton.setSelected(true);
ciaoToggleButton.addItemListener(e -> {
System.out.println("caiooasfsdvn");
try {
JOptionPane.showMessageDialog(panel1, "skjngksfnb");
} catch (Exception e2) {
e2.printStackTrace();
}
});
panel1.add(ciaoToggleButton);
pack();
setVisible(true);
}
public static void main(String[] args) {
new ErrorGUI();
}
}