Ich programmiere ein JToggleButton
zu laden/aus dem Speicher zu verwerfen, die die Konfiguration eines Elements (ein Teleskop config), also habe ich eine JComboBox
in einem JFrame
und in unmittelbarer Umgebung der Schaltfläche hinzugefügt um das ausgewählte Objekt zu laden. Wenn JToggleButton
ausgewählt ist, wird ein Festplattensymbol angezeigt, andernfalls ein anderes Symbol. Ich benutze dafür den IntelliJ IDEA GUI Editor. Natürlich habe ich hinzugefügt eine ItemListener
(wie von der Bahn vorgeschlagen) auf diese Schaltfläche:JToggleButton addItemListener scheint die ItemListener zu wiederholen immer
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();
}
}
});
Ausgang:
true
- ist> Wenn das Fenster
angezeigt LAOD_ACTION false
-> Als ich Klicken Sie auf die Schaltfläche
Ich habe einige Tests mit einigen neuen Umschalttasten gemacht und sie gaben mir den gleichen Fehler: Der Code innerhalb itemStateChanged(ItemEvent e) {...}
wird für immer wiederholt, ohne stoppi ng! In diesem Codeabschnitt gibt es keine for
und while
Schleifen! Das Ergebnis ist eine große Anzahl von Meldungsdialogen (nur ein Dialog sollte angezeigt werden), und wenn ich ein anderes Fenster in meinem Desktop fokussiere, wird der Bildschirm hinter den Dialogen schwarz (der Bereich des Elternfensters). Ich habe den Listener zu ActionListener
geändert und jetzt wird alles einmal/Klick ausgeführt.
Warum dieser Fehler? Ich habe diesen Code von https://stackoverflow.com/a/7524627/6267019 kopiert, wie Sie sehen können.
Voller Code auf GitHub Here, Ich habe den Code für diese Umschaltfläche hervorgehoben. Der gleiche Fehler passiert mit anderen JToggleButton
s in meiner MainActivity.java
Datei, und auch beim Debugging IntelliJ lässt mich sehen, dass der Code im Hörer für immer wiederholt wird. Nach einigen tausend Dialogen zeigt Windows mir eine Nachricht an und schließt Java Platform Binary mit einem Fehler.
EDIT:
Das gleiche Problem in einer neuen Klasse:
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();
}
}
Ich weiß diese Tatsache und es tut mir leid, aber wie kann ich 1200 Zeilen Code oder das XML des IntelliJ IDEA GUI Builders veröffentlichen? Welches Beispiel kann ich anbieten, wenn die Beispiele aus dem Web gut laufen? – SquareBoot
Das ist das Problem !! Die Beispiele funktionieren! Wenn ich ein neues Projekt erstelle, füge ich ein 'main' hinzu und schreibe den Code für' JFrame' mit einem Toggle-Button, es funktioniert! – SquareBoot
Meine Idee des Fehlers ist, dass es durch einen internen IntelliJ IDEA GUI Builder Fehler verursacht wird. Jetzt erstelle ich den gleichen Fehler in einem neuen Prj. – SquareBoot