Was tun HIDE_ON_CLOSE und setVisible() tatsächlich?

P

Patneu

Gast
Hallo,

ich bin momentan ein klein wenig verwirrt. Ich schreibe gerade ein kleines Programm, dass unter anderem ein Fenster erzeugen soll, das sieht momentan so aus:

[JAVA=229]class Eingabefenster extends JFrame implements ActionListener
{
String seite;

JPanel kopfPanel;
JPanel klassePanel;
JPanel schiffPanel;
JPanel partikelAngriffPanel;
JPanel energieAngriffPanel;
JPanel schildePanel;
JPanel panzerPanel;
JPanel antriebPanel;
JPanel hitpointsPanel;
JPanel anzahlPanel;
JPanel fehlerPanel;
JPanel hinzufügenPanel;

JLabel kopfLabel;
JLabel klasseLabel;
JLabel schiffLabel;
JLabel partikelAngriffLabel;
JLabel energieAngriffLabel;
JLabel schildeLabel;
JLabel panzerLabel;
JLabel antriebLabel;
JLabel hitpointsLabel;
JLabel anzahlLabel;
JLabel fehlerLabel;

JComboBox klasseListe;
JComboBox schiffListe;

JTextField partikelAngriffTextField;
JTextField energieAngriffTextField;
JTextField schildeTextField;
JTextField panzerTextField;
JTextField antriebTextField;
JTextField hitpointsTextField;
JTextField anzahlTextField;

JButton hinzufügenButton;

public Eingabefenster(String titel)
{
super(titel);

seite = titel;

setLayout(new FlowLayout());

kopfPanel = new JPanel();
kopfLabel = new JLabel("Bitte Werte und Anzahl des/der Schiffs/Schiffe eingeben!");
kopfPanel.add(kopfLabel);
add(kopfPanel);

klassePanel = new JPanel();
klasseLabel = new JLabel("Klasse: ");
klasseLabel.setPreferredSize(new Dimension(70, 20));
String[] klasseStrings = new String[9];
klasseStrings[0] = "<Bitte auswählen!>";
klasseStrings[1] = "Stahlchassis";
klasseStrings[2] = "Titanidchassis";
klasseStrings[3] = "Freedom-Class (Menschen)";
klasseStrings[4] = "Hellfire-Chassis (Ti-Roc)";
klasseStrings[5] = "Prallfeldgenerator (Tradoner)";
klasseStrings[6] = "Hyperiums-Class (Beraluten)";
klasseStrings[7] = "Shelloptress-Class (Myrianer)";
klasseStrings[8] = "Turtle Technik (Se'ze Lux)";
klasseListe = new JComboBox(klasseStrings);
klasseListe.setEditable(false);
klasseListe.setSelectedItem(0);
klasseListe.addActionListener(this);
klasseListe.setActionCommand("klasse");
klassePanel.add(klasseLabel, BorderLayout.CENTER);
klassePanel.add(klasseListe, BorderLayout.LINE_END);
add(klassePanel);

schiffPanel = new JPanel();
schiffLabel = new JLabel("Schiff: ");
schiffLabel.setPreferredSize(new Dimension(130, 20));
String[] schiffStrings = new String[7];
schiffStrings[0] = "<Bitte auswählen!>";
schiffListe = new JComboBox(schiffStrings);
schiffListe.setEditable(false);
schiffListe.setSelectedItem(0);
schiffListe.setEnabled(false);
schiffListe.addActionListener(this);
schiffListe.setActionCommand("schiff");
schiffPanel.add(schiffLabel, BorderLayout.CENTER);
schiffPanel.add(schiffListe, BorderLayout.LINE_END);
add(schiffPanel);

partikelAngriffPanel = new JPanel();
partikelAngriffLabel = new JLabel("Partikel-Angriff: ");
partikelAngriffLabel.setPreferredSize(new Dimension(100, 20));
partikelAngriffTextField = new JTextField(15);
partikelAngriffTextField.setEditable(false);
partikelAngriffPanel.add(partikelAngriffLabel, BorderLayout.CENTER);
partikelAngriffPanel.add(partikelAngriffTextField, BorderLayout.LINE_END);
add(partikelAngriffPanel);

energieAngriffPanel = new JPanel();
energieAngriffLabel = new JLabel("Energie-Angriff: ");
energieAngriffLabel.setPreferredSize(new Dimension(100, 20));
energieAngriffTextField = new JTextField(15);
energieAngriffTextField.setEditable(false);
energieAngriffPanel.add(energieAngriffLabel, BorderLayout.CENTER);
energieAngriffPanel.add(energieAngriffTextField, BorderLayout.LINE_END);
add(energieAngriffPanel);

schildePanel = new JPanel();
schildeLabel = new JLabel("Schilde: ");
schildeLabel.setPreferredSize(new Dimension(100, 20));
schildeTextField = new JTextField(15);
schildeTextField.setEditable(false);
schildePanel.add(schildeLabel, BorderLayout.CENTER);
schildePanel.add(schildeTextField, BorderLayout.LINE_END);
add(schildePanel);

panzerPanel = new JPanel();
panzerLabel = new JLabel("Panzer: ");
panzerLabel.setPreferredSize(new Dimension(100, 20));
panzerTextField = new JTextField(15);
panzerTextField.setEditable(false);
panzerPanel.add(panzerLabel, BorderLayout.CENTER);
panzerPanel.add(panzerTextField, BorderLayout.LINE_END);
add(panzerPanel);

antriebPanel = new JPanel();
antriebLabel = new JLabel("Antrieb: ");
antriebLabel.setPreferredSize(new Dimension(100, 20));
antriebTextField = new JTextField(15);
antriebTextField.setEditable(false);
antriebPanel.add(antriebLabel, BorderLayout.CENTER);
antriebPanel.add(antriebTextField, BorderLayout.LINE_END);
add(antriebPanel);

hitpointsPanel = new JPanel();
hitpointsLabel = new JLabel("Hitpoints: ");
hitpointsLabel.setPreferredSize(new Dimension(100, 20));
hitpointsTextField = new JTextField(15);
hitpointsTextField.setEditable(false);
hitpointsPanel.add(hitpointsLabel, BorderLayout.CENTER);
hitpointsPanel.add(hitpointsTextField, BorderLayout.LINE_END);
add(hitpointsPanel);

anzahlPanel = new JPanel();
anzahlLabel = new JLabel(" Anzahl: ");
anzahlLabel.setPreferredSize(new Dimension(115, 20));
anzahlTextField = new JTextField(15);
anzahlTextField.setEditable(false);
anzahlPanel.add(anzahlLabel, BorderLayout.CENTER);
anzahlPanel.add(anzahlTextField, BorderLayout.LINE_END);
add(anzahlPanel);

fehlerPanel = new JPanel();
fehlerLabel = new JLabel("Fehler! Bitte Eingaben überprüfen!");
fehlerLabel.setForeground(Color.red);
fehlerLabel.setVisible(false);
fehlerPanel.add(fehlerLabel);
add(fehlerPanel);

hinzufügenPanel = new JPanel();
hinzufügenButton = new JButton("Schiff(e) hinzufügen");
hinzufügenButton.addActionListener(this);
hinzufügenButton.setActionCommand("hinzufügen");
hinzufügenPanel.add(hinzufügenButton);
add(hinzufügenPanel);

setBounds(300, 130, 340, 470);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(HIDE_ON_CLOSE);
}

public void actionPerformed (ActionEvent ereignis)
{
}
}[/code]

Ganz fertig ist es, wie zu sehen, noch nicht. ;) Wie zu sehen ist, soll das Fenster mit "setDefaultCloseOperation(HIDE_ON_CLOSE)" versteckt bzw. unsichtbar gemacht werden, wenn der Nutzer auf das "X" klickt. Im Fall, dass der Nutzer den Button "hinzufügenButton" drückt, soll u.a. später dasselbe passieren (ist hier noch nicht zu sehen), wahrscheinlich einfach mit "setVisible(false)".

Da das Fenster im Verlauf der Nutzung des Programms sehr häufig geöffnet und geschlossen wird, war mein Hintergedanke dabei, das Eingabefenster-Objekt müsste ja nicht jedesmal "zerstört" werden, sondern nur versteckt und später wieder sichtbar gemacht.

Um das Eingabefenster-Objekt anfänglich zu erzeugen bzw. wieder sichtbar zu machen, verfügt ein anderes Fenster des Programms über einen Button, der, wenn vom Nutzer betätigt, das tut:

[JAVA=152]if(ereignis.getActionCommand().equals("gegnerHinzufügen"))
{
if(gegnerEingabefenster == null)
{
Eingabefenster gegnerEingabefenster = new Eingabefenster("Gegnerische Schiffe hinzufügen");
}
else
{
gegnerEingabefenster.setVisible(true);
gegnerEingabefenster.klasseListe.setSelectedItem(0);
gegnerEingabefenster.schiffListe.setSelectedItem(0);
gegnerEingabefenster.schiffListe.setEnabled(false);
gegnerEingabefenster.partikelAngriffTextField.setEditable(false);
gegnerEingabefenster.partikelAngriffTextField.setText(null);
gegnerEingabefenster.energieAngriffTextField.setEditable(false);
gegnerEingabefenster.energieAngriffTextField.setText(null);
gegnerEingabefenster.schildeTextField.setEditable(false);
gegnerEingabefenster.schildeTextField.setText(null);
gegnerEingabefenster.panzerTextField.setEditable(false);
gegnerEingabefenster.panzerTextField.setText(null);
gegnerEingabefenster.antriebTextField.setEditable(false);
gegnerEingabefenster.antriebTextField.setText(null);
gegnerEingabefenster.hitpointsTextField.setText(null);
gegnerEingabefenster.anzahlTextField.setEditable(false);
gegnerEingabefenster.anzahlTextField.setText(null);
gegnerEingabefenster.anzahlLabel.setPreferredSize(new Dimension(115, 20));
gegnerEingabefenster.fehlerLabel.setVisible(false);
}
}[/code]

Sollte das Eingabefenster-Objekt also noch nicht existieren, soll es erzeugt werden; existiert es bereits, soll es mit "setVisible(true)" wieder sichtbar gemacht und einige Eigenschaften, die der Nutzer evtl. geändert haben könnte (Textfeldeingaben etc.), zurückgesetzt werden.



Nun wollte ich das Programm aber testen und es sieht so aus als wird das Eingabefenster-Objekt doch jedes mal neu erzeugt, auch wenn es bereits existieren sollte.

Meine Frage ist also: Was genau tun HIDE_ON_CLOSE und setVisible(false)?
"Verstecken" sie das Eingabefenster-Objekt tatsächlich nur oder "zerstören" sie es?
Und ist es eigentlich sinnvoll ein Objekt nur zu "verstecken" oder könnte ich es auch x-mal "zerstören" und wieder erzeugen? Welchen Unterschied würde das machen? Würde dabei nicht eine Menge "Datenmüll" anfallen?
Und falls ja, wie kann ich ein Objekt tatsächlich nur "verstecken"?



Ich hoffe mein Problem ist einigermaßen deutlich geworden, wenn nicht, bitte einfach nachfragen. ;)

Ich bedanke mich schon im Voraus für alle Antworten. :)
 

Volvagia

Top Contributor
Java:
case HIDE_ON_CLOSE:
setVisible(false);
break;

Wie kommst du darauf, dass es bei setVisible neu erzeugt wird?
btw. erst setVisible aufrufen, wenn die Änderungen abgeschlossen sind. Ist sicherer.
 
P

Patneu

Gast
Volvagia hat gesagt.:
Wie kommst du darauf, dass es bei setVisible neu erzeugt wird?

Wie meinst du das genau bzw. welche meiner Äußerungen könnte man denn so verstehen?


Um nochmal sicher zu gehen, dass ich die richtigen Begriffe verwende, was ich darunter bisher verstehe:

- Ein Objekt erzeugen, bedeutet, den Konstruktor aufzurufen, um eine Instanz der entsprechenden Klasse (ein Objekt) zu erzeugen, wie etwa hier:
[JAVA=156]Eingabefenster gegnerEingabefenster = new Eingabefenster("Gegnerische Schiffe hinzufügen");[/code]
-Ein Objekt zu "verstecken" bedeutet es mit "setVisible(false)" unsichtbar zu machen.

Soweit richtig?
 

Volvagia

Top Contributor
Sorry, ich habe es falsch verstanden.
Du schreibst die neue Instanz in eine Methodenvariable, prüfst aber jedes mal die Klassenvariable.
 
P

Patneu

Gast
Hm, vielleicht habe ich was falsch verstanden, aber noch funktioniert es nicht. Vielmehr scheint es weiterhin so, als ob HIDE_ON_CLOSE das Eingabefenster-Objekt entsorgen würde, anstatt es nur unsichtbar zu machen.

Der Code für die Eingabefenster-Klasse sieht jetzt so aus:
[JAVA=190]class Eingabefenster extends JFrame implements ActionListener
{
public static boolean existiert = false;

String seite;

JPanel kopfPanel;
JPanel klassePanel;
JPanel schiffPanel;
JPanel partikelAngriffPanel;
JPanel energieAngriffPanel;
JPanel schildePanel;
JPanel panzerPanel;
JPanel antriebPanel;
JPanel hitpointsPanel;
JPanel anzahlPanel;
JPanel fehlerPanel;
JPanel hinzufügenPanel;

JLabel kopfLabel;
JLabel klasseLabel;
JLabel schiffLabel;
JLabel partikelAngriffLabel;
JLabel energieAngriffLabel;
JLabel schildeLabel;
JLabel panzerLabel;
JLabel antriebLabel;
JLabel hitpointsLabel;
JLabel anzahlLabel;
JLabel fehlerLabel;

JComboBox klasseListe;
JComboBox schiffListe;

JTextField partikelAngriffTextField;
JTextField energieAngriffTextField;
JTextField schildeTextField;
JTextField panzerTextField;
JTextField antriebTextField;
JTextField hitpointsTextField;
JTextField anzahlTextField;

JButton hinzufügenButton;

public Eingabefenster()
{
super();

existiert = true;

setLayout(new FlowLayout());

kopfPanel = new JPanel();
kopfLabel = new JLabel("Bitte Werte und Anzahl des/der Schiffs/Schiffe eingeben!");
kopfPanel.add(kopfLabel);
add(kopfPanel);

klassePanel = new JPanel();
klasseLabel = new JLabel("Klasse: ");
klasseLabel.setPreferredSize(new Dimension(70, 20));
String[] klasseStrings = new String[9];
klasseStrings[0] = "<Bitte auswählen!>";
klasseStrings[1] = "Stahlchassis";
klasseStrings[2] = "Titanidchassis";
klasseStrings[3] = "Freedom-Class (Menschen)";
klasseStrings[4] = "Hellfire-Chassis (Ti-Roc)";
klasseStrings[5] = "Prallfeldgenerator (Tradoner)";
klasseStrings[6] = "Hyperiums-Class (Beraluten)";
klasseStrings[7] = "Shelloptress-Class (Myrianer)";
klasseStrings[8] = "Turtle Technik (Se'ze Lux)";
klasseListe = new JComboBox(klasseStrings);
klasseListe.setEditable(false);
klasseListe.setSelectedItem(0);
klasseListe.addActionListener(this);
klasseListe.setActionCommand("klasse");
klassePanel.add(klasseLabel, BorderLayout.CENTER);
klassePanel.add(klasseListe, BorderLayout.LINE_END);
add(klassePanel);

schiffPanel = new JPanel();
schiffLabel = new JLabel("Schiff: ");
schiffLabel.setPreferredSize(new Dimension(130, 20));
String[] schiffStrings = new String[7];
schiffStrings[0] = "<Bitte auswählen!>";
schiffListe = new JComboBox(schiffStrings);
schiffListe.setEditable(false);
schiffListe.setSelectedItem(0);
schiffListe.setEnabled(false);
schiffListe.addActionListener(this);
schiffListe.setActionCommand("schiff");
schiffPanel.add(schiffLabel, BorderLayout.CENTER);
schiffPanel.add(schiffListe, BorderLayout.LINE_END);
add(schiffPanel);

partikelAngriffPanel = new JPanel();
partikelAngriffLabel = new JLabel("Partikel-Angriff: ");
partikelAngriffLabel.setPreferredSize(new Dimension(100, 20));
partikelAngriffTextField = new JTextField(15);
partikelAngriffTextField.setEditable(false);
partikelAngriffPanel.add(partikelAngriffLabel, BorderLayout.CENTER);
partikelAngriffPanel.add(partikelAngriffTextField, BorderLayout.LINE_END);
add(partikelAngriffPanel);

energieAngriffPanel = new JPanel();
energieAngriffLabel = new JLabel("Energie-Angriff: ");
energieAngriffLabel.setPreferredSize(new Dimension(100, 20));
energieAngriffTextField = new JTextField(15);
energieAngriffTextField.setEditable(false);
energieAngriffPanel.add(energieAngriffLabel, BorderLayout.CENTER);
energieAngriffPanel.add(energieAngriffTextField, BorderLayout.LINE_END);
add(energieAngriffPanel);

schildePanel = new JPanel();
schildeLabel = new JLabel("Schilde: ");
schildeLabel.setPreferredSize(new Dimension(100, 20));
schildeTextField = new JTextField(15);
schildeTextField.setEditable(false);
schildePanel.add(schildeLabel, BorderLayout.CENTER);
schildePanel.add(schildeTextField, BorderLayout.LINE_END);
add(schildePanel);

panzerPanel = new JPanel();
panzerLabel = new JLabel("Panzer: ");
panzerLabel.setPreferredSize(new Dimension(100, 20));
panzerTextField = new JTextField(15);
panzerTextField.setEditable(false);
panzerPanel.add(panzerLabel, BorderLayout.CENTER);
panzerPanel.add(panzerTextField, BorderLayout.LINE_END);
add(panzerPanel);

antriebPanel = new JPanel();
antriebLabel = new JLabel("Antrieb: ");
antriebLabel.setPreferredSize(new Dimension(100, 20));
antriebTextField = new JTextField(15);
antriebTextField.setEditable(false);
antriebPanel.add(antriebLabel, BorderLayout.CENTER);
antriebPanel.add(antriebTextField, BorderLayout.LINE_END);
add(antriebPanel);

hitpointsPanel = new JPanel();
hitpointsLabel = new JLabel("Hitpoints: ");
hitpointsLabel.setPreferredSize(new Dimension(100, 20));
hitpointsTextField = new JTextField(15);
hitpointsTextField.setEditable(false);
hitpointsPanel.add(hitpointsLabel, BorderLayout.CENTER);
hitpointsPanel.add(hitpointsTextField, BorderLayout.LINE_END);
add(hitpointsPanel);

anzahlPanel = new JPanel();
anzahlLabel = new JLabel(" Anzahl: ");
anzahlLabel.setPreferredSize(new Dimension(115, 20));
anzahlTextField = new JTextField(15);
anzahlTextField.setEditable(false);
anzahlPanel.add(anzahlLabel, BorderLayout.CENTER);
anzahlPanel.add(anzahlTextField, BorderLayout.LINE_END);
add(anzahlPanel);

fehlerPanel = new JPanel();
fehlerLabel = new JLabel("Fehler! Bitte Eingaben überprüfen!");
fehlerLabel.setForeground(Color.red);
fehlerLabel.setVisible(false);
fehlerPanel.add(fehlerLabel);
add(fehlerPanel);

hinzufügenPanel = new JPanel();
hinzufügenButton = new JButton("Schiff(e) hinzufügen");
hinzufügenButton.addActionListener(this);
hinzufügenButton.setActionCommand("hinzufügen");
hinzufügenPanel.add(hinzufügenButton);
add(hinzufügenPanel);

setBounds(300, 130, 340, 470);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(HIDE_ON_CLOSE);
}[/code]

Ich habe eine boolean Klassen-Variable "existiert" hinzugefügt, die standard-mäßig auf "false" steht (Code-Zeile 192). Wird ein Eingabefenster-Objekt erzeugt, setzt der Konstruktor diese Variable auf "true" (Code-Zeile 238).



Der Code für den Button, der bei Betätigung entweder ein neues Eingabefenster-Objekt erzeugt oder ein bereits bestehendes (das durch HIDE_ON_CLOSE versteckt worden sein sollte) durch setVisible(true) wieder sichtbar machen soll, sieht nun so aus:

[JAVA=124]if(Eingabefenster.existiert == false)
{
Eingabefenster eingabefenster = new Eingabefenster();
eingabefenster.setTitle("Eigene/Alliierte Schiffe hinzufügen");
}
else
{
eingabefenster.setTitle("Eigene/Alliierte Schiffe hinzufügen");
eingabefenster.klasseListe.setSelectedItem(0);
eingabefenster.schiffListe.setSelectedItem(0);
eingabefenster.schiffListe.setEnabled(false);
eingabefenster.partikelAngriffTextField.setEditable(false);
eingabefenster.partikelAngriffTextField.setText(null);
eingabefenster.energieAngriffTextField.setEditable(false);
eingabefenster.energieAngriffTextField.setText(null);
eingabefenster.schildeTextField.setEditable(false);
eingabefenster.schildeTextField.setText(null);
eingabefenster.panzerTextField.setEditable(false);
eingabefenster.panzerTextField.setText(null);
eingabefenster.antriebTextField.setEditable(false);
eingabefenster.antriebTextField.setText(null);
eingabefenster.hitpointsTextField.setText(null);
eingabefenster.anzahlTextField.setEditable(false);
eingabefenster.anzahlTextField.setText(null);
eingabefenster.anzahlLabel.setPreferredSize(new Dimension(115, 20));
eingabefenster.fehlerLabel.setVisible(false);
eingabefenster.setVisible(true);
}[/code]

Es sollte also überprüft werden, ob die Klassen-Variable "existiert" auf "false" ist (Code-Zeile 124) und wenn ja, soll ein neues Eingabefenster-Objekt erzeugt werden, auf das die Variable "eingabefenster" verweist (Code-Zeile 126). Das funktioniert auch.

Wenn die Klassen-Variable "existiert" aber auf "true" ist (also schon ein Eingabefenster-Objekt existieren sollte), werden die für diesen Fall vorgesehenen Aktionen (ab Code-Zeile 131) nicht ausgeführt. Stattdessen wird vom Programm eine "NullPointerException" bei Code-Zeile 131 geworfen.



Das müsste doch bedeuten, dass die Variable "eingabefenster" auf nichts bzw. auf "null" verweist. Das heißt doch, es existiert kein Eingabefenster-Objekt mehr.

Wenn HIDE_ON_CLOSE das bereits bestehende Eingabefenster-Objekt also nicht ensorgt, sondern nur unsichtbar macht, wieso kann ich es dann nicht wieder sichtbar machen? Es müsste doch noch vorhanden sein? Also warum kann ich darauf nicht mehr zugreifen?

Wäre sehr nett, wenn mir da jemand weiterhelfen könnte. :)
 
P

Patneu

Gast
Falls es wichtig ist, hier noch der vollständige text der Exception:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Hauptfenster.actionPerformed(Kampfsimulator.java:131)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
 

andiv

Bekanntes Mitglied
Java:
if(Eingabefenster.existiert == false)
* * * * * * {
* * * * * * * * Eingabefenster eingabefenster = new Eingabefenster(); // <-- SCHAU DIR DAS MAL GENAU AN!
* * * * * * * * eingabefenster.setTitle("Eigene/Alliierte Schiffe hinzufügen");
* * * * * * }
Hier erstellst du eine lokale Variable, die genauso heißt wie eine Variable in deiner Klasse. Das ist wohl nicht das was du willst.
 
P

Patneu

Gast
Ja, danke schön, dass hab ich gar nicht gemerkt. Manchmal sieht man halt den Wald vor lauter Bäumen nicht. :)

Habe es jetzt so umgeschrieben, dass jetzt die richtige Klassen-Variable "eingabefenster" auf das Eigabefenster-Objekt verweist und das lässt sich jetzt auch perfekt wieder sichtbar machen. Funktioniert jetzt alles genau wie ich wollte, danke schön. :)



Eins würde ich nach dem ganzen Aufwand aber doch gern noch wissen:

Ist es eigentlich die "übliche" Vorgehensweise, ein Fenster, dass oft geöffnet und wieder geschlossen werden soll, unsichtbar und wieder sichtbar zu machen? Oder werden solche Fenster im "Normalfall" einfach entsorgt und bei Bedarf wieder neu erzeugt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JavaFX Popover hide() mit Duration? AWT, Swing, JavaFX & SWT 3
R Show/Hide eines JPanels mit TitledBorder. AWT, Swing, JavaFX & SWT 11
Juelin Probleme bei Stage.close() AWT, Swing, JavaFX & SWT 23
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
H Swing BufferedReader.close() hängt im SwingWorker AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
R JavaFX Stage.close() funktioniert nicht im jar-File AWT, Swing, JavaFX & SWT 2
A Mouse event und exit on close AWT, Swing, JavaFX & SWT 11
Luk10 Überschreiben von JFrame: Close AWT, Swing, JavaFX & SWT 4
C Swing Menubar Close, Minimize, Maximize button AWT, Swing, JavaFX & SWT 7
B AWT ueber close schliesen AWT, Swing, JavaFX & SWT 8
L Fenster inaktiv setzen / deaktivieren (unable to close window) AWT, Swing, JavaFX & SWT 16
P JDialog Close-Button inaktiv machen AWT, Swing, JavaFX & SWT 1
F JFrame Close Problem AWT, Swing, JavaFX & SWT 1
M close methode AWT, Swing, JavaFX & SWT 3
hdi non-default close operation bei JDialog AWT, Swing, JavaFX & SWT 2
S Fensterbuttons (min / max / close) ausblenden AWT, Swing, JavaFX & SWT 5
G Listener fuer Window Close AWT, Swing, JavaFX & SWT 2
thE_29 Modaler Dialog - close on not focus AWT, Swing, JavaFX & SWT 3
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
K Swing AWT-EventQueue-1 java.lang.NoClassDefFoundError bei setVisible(true) AWT, Swing, JavaFX & SWT 3
A Swing Buttons werden trotz setVisible nicht dargestellt AWT, Swing, JavaFX & SWT 14
S JFrame -> setVisible AWT, Swing, JavaFX & SWT 3
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
1 Problem mit setVisible AWT, Swing, JavaFX & SWT 11
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
H Swing Keine Rückmeldung (freeze) bei setVisible(false) oder dispose() AWT, Swing, JavaFX & SWT 4
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
G Swing Wieso braucht man nach setVisible mal ein revalidate und mal nicht? AWT, Swing, JavaFX & SWT 8
B GlassPane setVisible(true) funktioniert nicht AWT, Swing, JavaFX & SWT 2
R Button soll nach dem er gedrückt wurde auf setVisible(false) gestellt werden. AWT, Swing, JavaFX & SWT 3
V JTextField nimmt keine Eingaben an, nach nachträglichem setVisible des JWindows AWT, Swing, JavaFX & SWT 4
L Swing setVisible(false) bei GridBagLayout - wie Layoutverschiebung verhindern? AWT, Swing, JavaFX & SWT 2
L SWT Control.setVisible? AWT, Swing, JavaFX & SWT 2
hdi Swing Erstmaliges setVisible - Verständnisfrage AWT, Swing, JavaFX & SWT 5
M Swing JScrollPane und setVisible AWT, Swing, JavaFX & SWT 2
L mehere JPanels auf JFrame - setVisible() funktioniert nicht AWT, Swing, JavaFX & SWT 3
T setVisible()-Aufrufe werden zu spät umgesetzt AWT, Swing, JavaFX & SWT 6
L Problem mit "setVisible" unter LINUX AWT, Swing, JavaFX & SWT 5
K JDialog - Methode nach setVisible() aufrufen AWT, Swing, JavaFX & SWT 4
B alternative zu setVisible() AWT, Swing, JavaFX & SWT 2
C JWindow.setVisible(true) dauert ewig AWT, Swing, JavaFX & SWT 7
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
E Hilfe - setVisible macht was es will AWT, Swing, JavaFX & SWT 7
R TextField bringt NullPointerException bei setVisible() AWT, Swing, JavaFX & SWT 12
S Ganze Fenster auf setVisible(false) setzen AWT, Swing, JavaFX & SWT 2
T Problem mit setVisible AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben