Programmabsturz beim Einbinden eines JMenu

Status
Nicht offen für weitere Antworten.

Ernesto95

Aktives Mitglied
Hallo Leutz !

Ich bin seit ein paar Tagen am verzweifeln an meinem eigentlich recht simplen Code, habe aber leider über die Forumssuche kein vergleichbares Problem gefunden.

Code:
package de.kmtu.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class MainFrame extends JFrame implements ActionListener {

	public MainFrame(){
		super("Kick-Man Testumgebung");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		erstelleMenuBar();
	}
	
	public void erstelleMenuBar(){		
		//Menus erstellen
		JMenu menuKMTU = new JMenu("KMTU");
		
		// MenuItems erstellen und ActionListener zufügen
		JMenuItem itemBeenden = erstelleMenuItem("KMTU beenden", "KMTUBeenden");
		
		// MenuItems den Menus zuordnen
		menuKMTU.add(itemBeenden);
		
		//MenuBar erstellen und die Menus übergeben
		JMenuBar mb = new JMenuBar();
		mb.add(menuKMTU);
		
		//MenuBar dem Frame übergeben
		this.setJMenuBar(mb);
	}
	
	private JMenuItem erstelleMenuItem (String titel, String actionCommand){
		JMenuItem item = new JMenuItem(titel);
		item.setActionCommand(actionCommand);
		item.addActionListener(this);
		return item;
	}
	
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("KMTUBeenden")) System.exit(0);
	}

}

Code:
package de.kmtu;

import de.kmtu.gui.MainFrame;

public class Main {

	public static void main(String[] args) {
		MainFrame start = new MainFrame();
		start.setSize(start.getMaximumSize());
		start.setVisible(true);
	}
}

Das Programm läuft an sich fehlerfrei, aber bei jedem xten Start erscheint nur ein leeres Fenster ohne das JMenu. Das Fenster lässt sich nicht schliessen, mein Prozessor rödelt wie verrückt und die Systemüberwachung gibt für Java CPU-Auslastungswerte jenseits von 80% an -> Fenster läßt sich nur über die Systemüberwachung abschiessen.

Wenn ich in der Klasse MainFrame die Zeile 17 auskommentiere und somit das Menu nicht erstellt wird lässt sich das Programm ohne Abstürze ausführen.

Keine Fehlermeldungen oder Warnungen im Eclipse, keine Fehlerausgaben des Compilers ... nix. Die Abstürze selbst sind auch komplett unregelmäßig.

Hat irgendwer eine Ahnung was hier vor sich geht ?

Danke für eure Hilfe !

Grüße Ernesto95
 

Zed

Bekanntes Mitglied
Kommt der Fehler auch wenn du die Funktion

private JMenuItem erstelleMenuItem (...)

weglässt und direkt implementierst.

Auf den ersten Blick muss ich sagen fällt miir an dem Code nix auf.

Benutzt du Try Catch irgendwo das evtl. Fehler verschluckt?
 

Ernesto95

Aktives Mitglied
Hallo Zed,

ja, gleiches Problem auch wenn ich die Methode erstelleMenuItem() weglasse und deren Code direkt in der Methode erstelleMenuBar() integriere.

Try Catch Anweisungen sind auch net vorhanden. Mein Projekt selbst ist schon etwas größer, um die Fehlersuche aber zu vereinfachen und den Code lesbarer zu machen habe ich die beiden oben zitierten Klassen in einem eigenen Projekt separiert und soweit wie möglich vereinfacht (bis auf ein MenuItem alle gelöscht, die actionPerformed() Methode entsprechend verkleinert etc). Sprich, oben ist wirklich der gesamte Quellcode aufgeführt.

Also rein theoretisch müsstest du den Fehler mit einfachem Copy/Paste in ein neues Projekt reproduzieren können ...

Grüße Ernesto95
 

Marco13

Top Contributor
Wenn das Problem nur manchmal auftritt, und so ein merkwürdiges Verhalten zeigt, könnte das ein Threading-Problem sein. Eigentlich müßte die main ja so aussehen
Code:
public class Main {

   public static void main(String[] args) 
   {
      SwingUtilities.invokeLater(new Runnable()
      {
         public void run()
         {
            MainFrame start = new MainFrame();
            start.setSize(start.getMaximumSize());
            start.setVisible(true);
         }
      });
   }
}
(steht auch in allen Dokus und Java-GUI-Beispielen) aber ich hatte auch mit der "faulen" Variante nie Probleme. Dass es "meistens" funktioniert ist zwar typisch für Threading-Probleme, aber dass er da so übel abkachelt erscheint mir schon seltsam ???:L Kannst's ja mal versuchen - das KÖNNTE die Ursache sein, aber seltsam wär's trotzdem...
 

Ernesto95

Aktives Mitglied
Hallo Marco13,

das mit dem SwingUtilities, kannte ich noch garnicht, muss ich mal nen bissle nach googeln was das bewirkt ... aber leider behebt auch das nicht den Fehler ... soeben ausprobiert und schon beim 2. Start wieder ein Absturz :-(

Hätte denn jemand mal Zeit mit den beiden oben zitierten Klassen bei sich ein Projekt anzulegen und zu versuchen den Fehler zu reproduzieren ... einfach nur um auszuschliessen das ich eure kostbare Zeit raube obwohl der Fehler vielleicht garnicht im Code sondern irgendwo in meiner Entwicklungsumgebung liegt. Muss ja nicht heute sein, ich geh jetzt auch ins Bett ;-)
 

Zed

Bekanntes Mitglied
Versuchs mal mit debuggen. Beim Debuggen einen Breakpoint auf Exception setzen.

Wenn nicht rausfindest warum das Programm abstürzt wirst wohl keine Lösung finden.

Ist natürlich ungewöhlich das ein Programm einfach so ohne irgendeine Fehlermeldung abstürzt. Ich hatte sowas auch mal und keine Ausgabe in der Console hab mich blöde gesucht bis ich irgendwo bei initialisieren eines Panels in eine Try catch gelaufen bin wo jemand catch Throwable abgefangen hat und die Fehlermeldung ins Nirvana geschickt hat.
 

thE_29

Top Contributor
Kommt den eine Exception oder stürzt es einfach ab?

Eventuell kommt ja eine Absturzlogdatei von der Java VM!
 

Ernesto95

Aktives Mitglied
Okay, das Problem habe ich lokalisiert, was allerdings die Ursache dafür ist ist mir zumindest aktuell ein Rätsel ...

Die Zeile 10 in meiner Main Methode

start.setSize(start.getMaximumSize());

liefert wenn das Programm abstürzt jedesmal absolut irreale Werte :roll:

Ändere ich die Zeile auf z.B.

start.setSize(800, 600);

so startet das Programm ohne Probleme ...

Seltsam ist nur das beim Absturz wo getMaximumSize(); irreale Werte liefert das Fenster dennoch in korrekter Größe (also maximiert) dargestellt wird, das Menu aber net erscheint. Ebenso seltsam, das getMaximumSize() stets normale Werte liefert wenn ich das Menu nicht integriere ... :lol:

Ich werd mal nen bissle googeln ob das in irgendeiner Hard/Softwarekonstellation (NVidia Treiber, Linux, 2 Monitore unterschiedlicher Auflösung etc.) ein bekannter Bug ist, sollte ich was finden meld ich mir hier dazu nochmal ... oder ist ein solches Probelm jemandem von euch schon bekannt ?

Ansonsten gilt: Problem erkannt, Ursache umgangen, Häkchen setzen und mich bei euch für eure Tips bedanken.

Ist übrigens nen nettes Forum, schnelle Antworten, viele Themen, nette Tutorials, werde garantiert mal öfters hier vorbeischaun :toll:

Grüße Ernesto95
 

Zed

Bekanntes Mitglied
If the maximum size has been set to a non-null value just returns it. If the UI delegate's getMaximumSize method returns a non-null value then return that; otherwise defer to the component's layout manager.

Soweit ich das verstehe gibt getMaximumSize() ohne Initialisierung immer etwas aus.
setSize kann logischerweisen denn Wert verwenden da es eine Dimension ist. Dimension kann auch negativ sein. Wobei für den negativen Fall ist das Verhalten nicht definiert.


irreale Werte liefert das Fenster dennoch in korrekter Größe (also maximiert) dargestellt wird

Ich denke mal du hast nicht verstanden wozu MaximumSize dient. Es ist einfach die max. größe der Komponenten nicht die maximierte.

Edit
Hab auf dem Weg zur Arbeit nochmal darüber nachgedacht warum es nur passiert wenn du JMenu nutzt.
Ich denke JMenu hollt sich die Größe mit getSize() und rechnet mit dem Wert. Das Menu kann schließlich nicht größer sein als die Komponente und wenn er nur käse mit getSize bekommt stürzt er ab.
 

Ernesto95

Aktives Mitglied
Zed hat gesagt.:
Ich denke mal du hast nicht verstanden wozu MaximumSize dient. Es ist einfach die max. größe der Komponenten nicht die maximierte.

getMaximumSize() liefert die maximal Größe der Komponente, aber nicht die Maximierte, das ist klar.

Zum Maximieren selber dient setSize().

Wenn ich aber mit frame.setSize(frame.getMaximumSize()) den Wert der maximalen Größe an die setSize() Methode übergebe, dann müsste das Fenster sich maximiert darstellen. Oder wie sonst sollte man in Java ein Fenster beim Programmstart maximiert darstellen ? Und Fakt ist ja, es klappt ... halt nur nicht immer ... und die Frage bleibt ... warum nicht immer ?

Aber wie gesagt, Problem zumindest für mich ist dahingehend gelöst das ich das Fenster jetzt mit fixen Werten die meiner Auflösung entsprechen maximiere. Und da es auch nur bei mir Laufen soll ist das zumindest für dieses Program kein Nachteil ...
 

Ernesto95

Aktives Mitglied
mmmh, wenn ich das nur als ersatz der setSize() Zeile angebe ist das Fenster 20x10 pixel groß ...
 

Zed

Bekanntes Mitglied
Ich bin auch gerade an einer SWING Anwendung dran und ich habs bei meiner getestet und das Fenster startet maximiert.
 

Marco13

Top Contributor
Ne, aber .... wenn der Frame gefragt wird: "Was ist denn DEINE maximum size?" (unabhängig davon, wie groß der Desktop ist!) dann wird er vielleicht sagen: "Och, ich kann beliebig groß sein..." (d.h. so groß wie Integer.MAX_VALUE). Hab's aber nicht getestet, ist nur eine Vermutung....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Programmabsturz durch Fortschrittsanzeige AWT, Swing, JavaFX & SWT 3
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing Vorgehen beim Aufruf der Klassen/Methoden AWT, Swing, JavaFX & SWT 7
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
K Swing Automatisches "Packen" beim "Neu-Painten" AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben