Я программирование JToggleButton
для загрузки в/выбросить из памяти конфигурации элемента (телескоп конфигурации), поэтому я добавил JComboBox
в JFrame
и рядом с ним кнопкой для загрузки выбранного элемента. Когда выбрано JToggleButton
, отображается значок жесткого диска, другой значок, если в противном случае. Для этого я использую редактор IntelliJ IDEA GUI. Конечно, я добавил ItemListener
(как это было предложено из Интернета) на эту кнопку:JToggleButton addItemListener кажется повторить 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) {...}
повторяется навсегда, без stoppi нг! В этом фрагменте кода нет for
и while
петель! Результатом является большое количество диалогов сообщений (только один диалог должен отображаться), и если я фокусирую другое окно на своем рабочем столе, экран за окнами становится черным (область родительского окна). Я изменил слушателя на ActionListener
, и теперь все выполняется один раз/клик.
Зачем нужна эта ошибка? Я скопировал этот код с https://stackoverflow.com/a/7524627/6267019, как вы можете видеть.
Полный код на GitHub Here, я выделил код для этой кнопки переключения. Такая же ошибка возникает и с другими JToggleButton
s в моем MainActivity.java
файле, а также при отладке IntelliJ позволяет мне видеть, что код в слушателе повторяется навсегда. После нескольких тысяч диалоговых окон Windows показывает мне сообщение и закрывает Java Platform Binary с ошибкой.
EDIT:
Та же проблема в новом классе:
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();
}
}
Я знаю этот факт, и я сожалею об этом, но как я могу опубликовать 1200 строк кода или XML конструктора GUI IntelliJ IDEA? Какой пример я могу предоставить, если примеры из сети работают хорошо? – SquareBoot
В этом проблема !! Примеры работают! Если я создаю новый проект, я добавляю 'main', и я пишу код для' JFrame' с помощью кнопки переключения, он работает! – SquareBoot
Мое представление об ошибке заключается в том, что она вызвана внутренней ошибкой встроенного конструктора GUI IntelliJ IDEA. Теперь я создаю ту же ошибку в новом prj. – SquareBoot