2016-05-18 6 views
1

Zunächst einmal, ich weiß, dass Fragen wie diese schon einmal gestellt wurden, aber keine Antworten scheinen mein Problem zu beheben.Komponente muss einen gültigen Partner haben - BufferStrategy

Ich arbeite an einem kleinen Spiel, und aus irgendeinem Grund gibt Java eine IllegalStateException zurück, wenn ich versuche, eine neue Pufferstrategie zu erstellen. Ich bin das Spiel zu einem JFrame hinzufügen, aber die Ausnahme noch geworfen wird, hier ist der Code zum JFrame für das Hinzufügen von:

JFrame frame; 


public Window(int x, int y, int width, int height, String title, boolean focus, Main game) throws IOException { 
     frame = new JFrame(); 
     frame.setLocation(x, y); 
     frame.setSize(new Dimension(width, height)); 
     frame.setTitle(title); 
     frame.add(game); 
     game.start(); 
     frame.setAutoRequestFocus(focus); 
     frame.setFocusable(true); 
     frame.setVisible(true); 
    } 

Und hier ist der Code, um das Fenster für die Erstellung von (in der Hauptklasse befindet):

window = new Window(x, y, WIDTH, HEIGHT, "Title", true, this); 
+1

Setzt 'game.start();' nach 'frame.setVisible (true);' ändert nichts? – Berger

+0

@Berger Ja es tut, danke! – ItzBenteThePig

Antwort

0

ich gehe davon aus createBufferStrategy() auf dem Rahmen von game.start() aufgerufen wird.

Die IllegalStateException kann passieren, weil der JFrame nicht wirklich auf dem Computer existiert (oder so ähnlich), bis ihm Ressourcen von außerhalb der JVM zugewiesen wurden.

Als ich selbst versuchte, createBufferStrategy(), der Fehler sagte, dass "Komponente einen gültigen Peer haben muss". Peers sind offenbar Beispielversionen von grafischen Komponenten, die das Betriebssystem oder der Grafikmanager als Archetyp zum Zeichnen Ihrer benutzerdefinierten Komponenten verwendet.

Ich nehme an, dass, bis Ihr JFrame seinem Peer im Betriebssystem zugewiesen ist, es nicht alle Informationen hat, um eine BufferStrategy zu erstellen - die Größe des JFrames kann intern als 0 von 0 aufgelistet werden , und es wird nicht auf Breite nach Höhe aktualisiert, bis Sie der JVM mitteilen, dass der Rahmen sichtbar oder "gültig" sein soll. Sie müssen dies tun, bevor Sie game.start() aufrufen.

frame.setVisible (true) zeigt den Frame an und weist Peers nach Bedarf zu. Sie können game.start() danach aufrufen.

Wenn Sie createBufferStrategy() auf einem unsichtbaren JFrame aufrufen möchten, versuchen Sie frame.pack(), das jede Komponente im Rahmen überprüft, ohne sie anzuzeigen. Hinweis: Es komprimiert auch den Rahmen, um ihn an seine Komponenten anzupassen - wenn Sie noch nichts hinzugefügt haben oder setMinimumSize() noch nicht aufgerufen haben, wird der JFrame verkleinert.

Verwandte Themen