StackOverflow nach einem Tag Laufzeit

G

Gast2

Gast
Hi,
ich habe eine Swing Anwendung geschrieben, die bei mir nach ca. einem Tag Laufzeit Probleme macht.
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
2010-01-18 06:59:04,593 [AWT-EventQueue-0] ERROR: at java.awt.AWTEventMulticaster.mouseEntered(Unknown Source)
[... 50-100x...]

Diesen Feher bekomme ich, nachdem nach ca. einem Tag Laufzeit mit der Maus auf ein Label gehe. Auf diesem Label liegt eigentlich ein Listener der ein Popup anzeigt wenn draufgeklickt wird.
Nachdem diese Exception geworfen wurd friert dann auch die komplette GUI ein und ich darf das Programm neustarten.

Mir scheint, dass irgendwie EDT vorher schon irgendwie blockiert und durch diese Events dann dessen Aufrufstack überläuft. Lieg ich da mit meiner Vermutung richtig und muss daher woanders mit der Suche beginnen oder gibts ne andere Möglichkeit dem Problem auf die Schliche zu kommen?

Gruß,
Eike
 

MQue

Top Contributor
Ich hatte das Problem mal, als bei mir mehrere Komponenten bzw. deren Listener zyklische Abhängigkeiten hatten, also wenn ich auf einen Button geklickt habe, wurde auch ein ActionListener eine anderen Komponente aufgerufen. Das ist eine mögliche Fehlerursache, nichts genaueres kann man aber nicht sagen, Schau dir mal die Anwendung mit einem Proofiler an und erzeuge ein paar Snapshots, dann siehst du, was sich in deiner Applikation so tut.
 

Meru

Bekanntes Mitglied
Ich würde erst mal nen Debugger durchjagen und dann Schritt für Schritt den Event-Process verfolgen.

StackOverflow kommt oft dadurch zustande, dass man eine Endlosschleife lostritt ala Rekursion oder massig Schleifendurchläufe ohne ersichtlichen Endes
 
G

Gast2

Gast
Habs schon mit nem Debugger und Profiler versucht. Die ersten ersten Stunden läufts ja noch normal so wie es soll, aber wenn ichs mal nachts laufen lassen bekomme ich am nächsten morgen diesen Fehler.

Kanns denn sein dass ich nen Stackoverflow bekomme wenn die Events nichtmehr abgearbeitet werden können vom EDT ?
Ich bilde mir nämlich auch ein (obs wirklich so ist weiß ich nicht ;)) dass Teile der Anwendung auch nichtmehr richtig arbeiten, was mich vermuten lässt dass irgendwo nen Deadlock entstanden ist und sich nen Thread aufgehangen hat.
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
AWTEventMulticaster ist eine Klasse, die Events an zwei weitere EventListener weiterreicht,
AWTEventMulticaster ist selber auch so ein EventListener,
ein derartiges Objekt wurde bei sich selbst eingefügt, informiert sich für alle Ewigkeit selber

es ist fraglich ob du was damit zu tun hast, überprüfe aber allen Code, der mit Listener, add + remove zu tun hat,
wird in der Richtung im Laufe des Programms noch etwas gemacht?
 
G

Gast2

Gast
Danke dafür erstmal, ich bin grad noch auf der Arbeit. Wenn ich wieder daheim bin werde ich das mal kontrollieren.
Mich wunderts halt, dass der Fehler nicht direkt auftaucht, sondern erst nach einigen Stunden. Wenn da irgendwelche Listener falsch miteinander verknüpft sind müsste der Fehler doch augenblicklich beim ersten mal auftauchen oder irre ich mich da?
 
S

SlaterB

Gast
das deutet auf einen unerklärlichen internen Bug hin, ja,
wenn du bei
Google
schaust, finden sich auch manche ähnliche Probleme, aber exakt dasselbe habe ich nicht gesehen bis auf genauso unschlüssiges wie
Swing - StackOverflowError from mouseEntered??


deshalb auch meine Frage, genau zu schauen, ob nicht nach einem Tag doch noch irgendeine relevante Änderung von deinem Code aus kommt,
sonst kann man wenig machen außer Hoffen/ Versions-Wechsel/ die Stelle finden und mühsam was drumherum kitten,
nach einem Testprogramm frage ich gar nicht erst, wenn man einen Tag warten muss ;)
 
G

Gast2

Gast
Hab mich durch die Googleergebnisse mal ein wenig durchgelesen und nochmal durch meinen Code geschaut.

Ich fürchte ich hab den Fehler gefunden:

Java:
t = new Timer(5000, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        updateConnectionCountLabels();
    }
});
t.setRepeats(true);
t.start();

Java:
public void updateConnectionCount() {
    statusActiveConnectionCount.setText(ConnectionManager.getActiveConnectionCount()+"");
    updateActiveConnectionCountPopup();
}

private void updateActiveConnectionCountPopup() {
    /* Popup leeren */
    connectionCountPopup.removeAll();
    JLabel item;
    ArrayList<BasicConnection> activeConnections = ConnectionManager.getActiveConnections();
    if (activeConnections.size() == 0) {
        connectionCountPopup.add(item = new JLabel("keine aktive Verbindungen"));
    } else {
        connectionCountPopup.add(item = new JLabel("Aktive Verbindungen: "));
    }

    /* Schriftart laden */
    Font f_plain = new Font(Settings.getString("MAINFRAME", "popup.fontfamily"), Font.PLAIN, Settings.getInt("MAINFRAME", "popup.fontsize"));
    Font f_bold = new Font(Settings.getString("MAINFRAME", "popup.fontfamily"), Font.BOLD, Settings.getInt("MAINFRAME", "popup.fontsize"));
    item.setFont(f_bold);

    for (int i = 0; i < activeConnections.size(); i++) {
        BasicConnection con = activeConnections.get(i);
        connectionCountPopup.add(item = new JLabel(con.toString()));
        item.setFont(f_plain);
    }

    connectionCountPopup.setLabel("ActiveConnections");
    connectionCountPopup.setBorder(new BevelBorder(BevelBorder.RAISED));
    connectionCountPopup.setVisible(false);

    MouseAdapter mouseListener = new MouseAdapter() {
        public void mousePressed(MouseEvent e) { checkPopup(e); }
        public void mouseClicked(MouseEvent e) { checkPopup(e); }
        public void mouseReleased(MouseEvent e) { checkPopup(e); }

        private void checkPopup(MouseEvent e) {
            if (!connectionCountPopup.isVisible() && (e.isPopupTrigger() || e.getButton() == MouseEvent.BUTTON1)) {
                connectionCountPopup.show(statusActiveConnectionCount, 0, -connectionCountPopup.getHeight());
                connectionCountPopup.show(statusActiveConnectionCount, 0, -connectionCountPopup.getHeight());
                // Doppelt ausführen damit größe des Popups richtig verwendet wird... buggy?!
            }
        }
    };
    statusActiveConnectionCountLabel.addMouseListener(mouseListener);
    statusActiveConnectionCount.addMouseListener(mouseListener);
}

Ich denke es ist nicht sinn der Sache immer nen neuen MouseListener hinzuzufügen, oder? :oops:
Den MouseListener hatte ich deswegen neu erstellt, damit die Position des Popups immer richtig ist. Die untere linke Kante des Popup soll an die rechte obere Kante eines Labels... musste da auch den show befehl zweimal ausführen, damit er mir die Position richtig berechnet. getHeight() hatte da immernoch den wert vom vorherigen Popup. (nen pack() sollte es doch da tun oder?)
Herrlich auf was für ideen man immer während des Tippens kommt :bae:

Nun die Frage wie ich die Listener die am statusActiveConnectionCount und statusActiveConnectionCountLabel hängen entfernen kann. Sollte ich mir ne Referenz auf den Listener speichern und den vorm hinzufügen des neuen wieder entfernen.
Oder besser den Listener nur einmal hinzufügen und im checkPopup() nen pack ausführen?

EDIT:
pack(), validate() oder doLayout() helfen leider nicht, also doch zweimal show aufrufen?
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
ich verstehe nicht so richtig worum es geht und warum doLayout() was mit dem Listener zu tun hat,
aber will auch gerade nicht angestrengt nachdenken ;)

nur als Grundlage: Listener immer (oder eben jetzt wenn es Probleme gibt) nur genau einmal und am Anfang adden,
wenn man sie zwischenzeitlich deaktivieren will kann man im inneren per if die Aktivität steuern

bei neuen Komponenten muss man sicherlich auch neue Listener adden,
evtl. nur vorhandene verschieben? aber zu deinen Popups usw. kann ich grad nix genaues sagen
 
G

Gast2

Gast
Sry, das mit dem StackOverflow und dem doppelten Aufruf von show() waren zwei verschiedene Probleme.
Durch den Timer adde ich jede 5sek einen neuen Mouselistener, ich denke daher kommt dann auch der Stackoverflowerror, oder nicht? Den Mouselistener würd ich dann nur einmal hinzufügen beim start des progs.
Das zweite prob ist, dass ich connectionCountPopup.show() zweimal aufrufen muss, damit er die größe richtig erkennt, und da wollte ich einfach pack, validate oder doLayout vorher ausführen, damit er die Größre direkt richtig ausliest, aber das funktioniert leider nicht. Also werde ich wohl bei zwei show aufrufen bleiben müssen, oder gibts da ne andere lösung?
 
G

Gast2

Gast
Durch den Timer adde ich jede 5sek einen neuen Mouselistener, ich denke daher kommt dann auch der Stackoverflowerror, oder nicht?
nein ... unter Strich kommt nur jedesmal ein neuer einfacher Funktionsaufruf hinzu ... ein StackOverflow erhälst Du aber nur bei einem rekusiven Funktioneausruf - oder wenn die Aufruftiefe zu tief ist bzw. der Stack mit lokalen Variablen bombardiert wird

Java:
handleMouseEvent();
handleMouseEvent();
handleMouseEvent();
handleMouseEvent();
handleMouseEvent();
// ... und weiter

Den Mouselistener würd ich dann nur einmal hinzufügen beim start des progs.
ist zu empfehlen - wie schon geschrieben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Rekursive Methoden -> Error: StackOverFlow AWT, Swing, JavaFX & SWT 2
G Stackoverflow bei JFrame AWT, Swing, JavaFX & SWT 5
berserkerdq2 Buttons und Shapes sehen ja nach Screengröße klein oder zu groß aus, jemand eine Idee, was man tun kann? AWT, Swing, JavaFX & SWT 1
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
H JavaFX Fenstergröße nach maximieren erkennen AWT, Swing, JavaFX & SWT 6
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
T Elemente auf vorheriger Stage, nach Wechsel der Stage ansprechen AWT, Swing, JavaFX & SWT 32
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
M Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer? AWT, Swing, JavaFX & SWT 18
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
N JavaFX Tableview nach Löschen von Element falscher Index AWT, Swing, JavaFX & SWT 4
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
VPChief Nach abspielen von Sound reagiert das Program nichtmehr AWT, Swing, JavaFX & SWT 9
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
K JavaFX Element in HBOX nach rechts verschieben AWT, Swing, JavaFX & SWT 2
S JavaFX Slider freezt nach Benutzung AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
F JavaFX Zustand der CheckMenuItems behalten nach Programmneustart AWT, Swing, JavaFX & SWT 7
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
stroggi Swing Suche nach Kurveneditor (UI-Element) AWT, Swing, JavaFX & SWT 1
Neumi5694 java.awt.Window nach javafx.stage.Window AWT, Swing, JavaFX & SWT 1
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
MiMa Java, Maven Projekte nach JavaFX? AWT, Swing, JavaFX & SWT 3
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
MiMa Java Projekt nach JavaFX convertieren AWT, Swing, JavaFX & SWT 4
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
F AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen AWT, Swing, JavaFX & SWT 13
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
J Java FX Koordinaten NACH Animation setzen, wie? AWT, Swing, JavaFX & SWT 9
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
Pr0m3theus Animation nach Event AWT, Swing, JavaFX & SWT 6
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Memory Karten nach Paar offen bleiben sonst wieder umdrehen AWT, Swing, JavaFX & SWT 1
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing Seltsame Ausgabe nach ButtonClick AWT, Swing, JavaFX & SWT 1
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
L Graphik nach 100 ms neu laden AWT, Swing, JavaFX & SWT 1
B Doppelte MenuBar -> Nach Minimieren verschwunden AWT, Swing, JavaFX & SWT 3
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
E JMenu erscheint nach RDP-Verbindung auf falschem Desktop AWT, Swing, JavaFX & SWT 1
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
M Swing PDF Datei nach drucken nicht löschbar AWT, Swing, JavaFX & SWT 6
M JavaFX TableView nach Spalte sortieren AWT, Swing, JavaFX & SWT 1
F 2D-Grafik Grafikproblem nach Aufruf von JColorChooser-Dialog AWT, Swing, JavaFX & SWT 6
J JTable filtern nach einer Spalte AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
K Swing JPanel nach oben und links vergrößern AWT, Swing, JavaFX & SWT 3
Z Plot nach links verschieben!! AWT, Swing, JavaFX & SWT 1
J Swing: JFrame nach oben "aufklappen" AWT, Swing, JavaFX & SWT 0
X JFrame erst nach dem Laden sichtbar stellen AWT, Swing, JavaFX & SWT 8
G .jar startet nicht nach Exportierung AWT, Swing, JavaFX & SWT 7
P Swing JTable flimmert nach Zellsortierung AWT, Swing, JavaFX & SWT 3
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
D Swing Bestimmte Berechnung von Spalten durchführen und dann die Zeilen nach bestimmten Kriterien einfärben AWT, Swing, JavaFX & SWT 5
A JPanel wird nach Buttonklick nicht angezeigt AWT, Swing, JavaFX & SWT 2
P Swing JTable keine Markierung nach Button klick AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen


Oben