Event Handling JButton Actionevent: starte Spiel

unchroot

Mitglied
hallo leute

ich bin grad dran mein erstes Spiel (naja eher Animation mit Bewegung und Jump:) ) zu programmieren...

hab das spiel soweit fertig, kann es von ner Testklasse aus starten. Aber ich wollte noch ein Menü einbauen als Intro...

wenn ich aber das Game von Actionperformed aus starten möchte geht das nicht, ich bekomme einen Grey-Fullscreen und folgenden Fehler:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Theorie.animation_2D.ScreenManager.getGraphics(ScreenManager.java:145)
	at Theorie.animation_2D.GameCore.loop(GameCore.java:63)
	at Theorie.animation_2D.GameCore.run(GameCore.java:42)
	at Theorie.animation_2D.Menu.startGame(Menu.java:72)
	at Theorie.animation_2D.Menu$2.actionPerformed(Menu.java:65)
	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.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(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)

die Zeilenangaben zeigen jeweils auf die draw-Methoden
und hier zum Verständnis noch bisschen Code:

Java:
public class TEST_ANIMATION {

	public static void main(String[] args) {
		@SuppressWarnings("unused")
		Menu menu = new Menu();
                // new Game().run(); // funktioniert!
	}
}

Java:
public class Menu extends JFrame {
....
	public Menu() {
        ... 
        // ActionListener wird als anonyme Klasse eingebunden
        play.addActionListener(new ActionListener() { // JButton
            // Beim Drücken des Buttons wird actionPerformed aufgerufen
            public void actionPerformed(ActionEvent e) {
              Menu.this.dispose(); 
              new Game().run(); //<========= funktioniert nicht
            }
        });
   
	}....

Alles ist im gleichen Pkg.
Es würd mich interessieren: Warum funktioniert es nicht? Und wie kann ich es anders hinbekommen sodass es funzt???:L

lg
 
S

SlaterB

Gast
der Code etwa von ScreenManager.getGraphics() hat nicht weiter zu interessieren?
irgendwo wird dort null verwendet,

getGraphics() selbst ist schon ein schlimmes Zeichen, wenn auch bisher nur dein Methodenname,
getGraphics() auf einem GUI-Objekt aufzurufen um ein Graphics-Objekt fürs Zeichnen zu erhalten wäre jedenfalls ein übler fehleranfälliger Weg,
man muss die normalen paint-Methoden korrekt überschreiben

hier ein Tutorial
http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html
 

unchroot

Mitglied
naja ich dachte es wird ein fehler sein, der mit sichtbarkeit anonymer klassen zu tun hat, denn ohne Intro funktioniert die ganze Animation reibungslos...

ScreenManger:
Java:
	public Graphics2D getGraphics() {
		Window window = device.getFullScreenWindow();
		if (window != null) {
			BufferStrategy strategy = window.getBufferStrategy();
			return (Graphics2D) strategy.getDrawGraphics();
		} else {
			return null;
		}
	}

GameCore: loop:
Java:
public void loop() {
		long startTime = System.currentTimeMillis();
		long currTime = startTime;

		while (isRunning) {
			long elapsedTime = System.currentTimeMillis() - currTime;
			currTime += elapsedTime;
			update(elapsedTime);

			// draw the screen
			Graphics2D g = screen.getGraphics();
			draw(g);
			g.dispose();
			screen.update();

			// take a nap
			try {
				Thread.sleep(20);
			} catch (InterruptedException ex) {
			}

wenn ich ehrlich bin: den screenmanager hab ich mehr oder weniger irgendwoher kopiert... Hab zuerst einen komplizierten gehabt, der den Fullscreen über DisplayMode-Parameter gesettet hat, hat aber nicht funktioniert, also hab ich jetzt einen ders über JFrame tut

ist aber nur ne Randbemerkung, aber wenn mich jemand belehren will, nur zu:
Java:
public void setFullScreen(JFrame myWindow){
		 // Remove the title bar, etc.
	     // If the window has already been set visible or packed, this triggers an error :(
         myWindow.setUndecorated(true);
	     // Do not allow user to resize the window...
	     // ...it should always be the size of the whole screen!
	     myWindow.setResizable(false);
	     // Next, make the window as large as the screen.
	     device.setFullScreenWindow( myWindow );
	       }

Das Tutorial muss ich mir anschauen, aber gibt halt so viele von denen, man weiss nicht wo anfangen ;)
 
S

SlaterB

Gast
der Unterschied dürfte hier konkret sein, dass aus der main gestartet Game nebenläufig ausgeführt wird,
aus dem Listener aber durch den AWT-Thread und solange der daran arbeitet kann ansonsten manches in der GUI nicht funktionieren

mindestens wäre wohl Standard, aus dem Listener einen Thread zu starten

------

allgemein kann ich von dem ScreenManger-Konzept nur abraten,
wenn es aber nicht ganz deine Idee ist dann kann man zumindest hoffen, dass es in gewissen Grenzen getestet ist und funktionieren soll
 

unchroot

Mitglied
Danke, das war des Rätsels Lösung:

Java:
   play.addActionListener(new ActionListener() {
            // Beim Drücken des Buttons wird actionPerformed aufgerufen
            public void actionPerformed(ActionEvent e) {
				Menu.this.dispose();
				Thread thread = new Thread("Game thread") {
            	        public void run() {
            	            new Game().run();
            	        }
            	    };
            	    thread.start();
            }
        });
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
C JButton-Name per ActionEvent rausfinden AWT, Swing, JavaFX & SWT 2
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich 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
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12
B JButton ausblenden AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben