ich habe eine GUI und innerhalb dieser GUI ist ein Button auf den man klickt und es öffnet sich ein weiteres JFrame im Vollbildmodus mit entsprechenden Displaymodes.
Das funktioniert wunderbar, selbst der Übergang vom window in den Fullscreenmode funktioniert ohne flackern und wird fast ganz sauber dargestellt. Wenn ich nun im Fullscreen das eben aufgegangene Fenster mit dipose() schließe und anschließend wieder öffne erhalte ich eine Fehlermeldung : "Component must have a valid peer". Nun verwende ich BufferStrategy des JFrames selbst, um im Vollbildmodus zu rendern(ohne Canvas). Bisher rufe ich die createBufferStrategy(2) - Methode beim ersten rendern auf mittels null Abfrage und nem return. Beim zweiten Aufruf allerdings scheint keine BufferStrategy mehr erzeugt zu werden.
Ich habe ein bisschen gegoogelt und herausgefunden, dass das JFrame scheinbar nicht vollständig geladen ist bevor die createBufferStrategy(2) - Methode aufgerufen wird. Ich habe bisher versucht ein pack() und setVisible(true) vor der Strategy aufzurufen aber ohne Erfolg. Nachdem ich das Fenster mit der aktuellen Bildschirmauflösung (Windows) erzeuge und den Fenstermodus vor der BS-Methode erzeuge müsste das Fenster eigentlich eine width und eine height haben. Dennoch kommt der Fehler.
Hm. Das lustige ist, wenn ich bevor ich mir mit getDrawGraphics() das Graphicsobjekt hole if(contentLost()) abfrage , was eigentlich keinen Sinn ergibt , dann funktionierts. Momentan rendere ich noch nichts, aber ich vermute, dass dann nur einmal gerendert wird.
....
Doch, immer noch verwendbar. Es wird nur nicht garantiert, dass es noch lange drin bleibt.
Aber zu jedem Deprecated gibt's auch einen Grund. Schau dir die API Doku des hide() Befehls an. Da steht auch, was du stattdessen verwenden sollst.
Ok, ich denke ich weiss jetzt warum. Das rendern läuft bei mir in nem Thread. Sobald ich das Fenster mit dispose zerstöre ist dieses nicht mehr da und der Thread läuft aber trotzdem noch weiter. D.h. BS sucht vergeblich nach dem Fenster und es erscheint die Fehlermeldung.
Dennoch danke für den Tipp. Allerdings muss ich sagen, dass es mir vorerst eigentlich ganz recht ist wenn das gesamte Fenster zerstört wird, da ich ja jedesmal ein neues erzeugen möchte. Das mit hide() und show() klingt aber auch ganz interessant.