Spiel lässt sich nicht aus GUI starten

FlexiTus

Mitglied
Hallo,

ich habe folgendes Problem: Wenn ich mein Spiel aus der Klasse heraus starte, dann läuft es ohne Probleme, natürlich das normale Flackern von Java^^ Nun rufe ich diese Klasse aus meiner GUI auf, wenn ich einen Button drücke (ActionListener). Das Fenster öffnet sich, weißer Schrim, nichts geschieht und es lässt sich nicht schließen (setDefaultCloseOperation(3); ). Ich poste jetzt meinen Quelltext hinten dran. Haben sich schon ein paar Leute den Kopf dran zerbrochen:D

Erst den meines Spiels: (nur relevante Klassen für das Projekt hier drin)
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics.*;
import java.io.*;

public class Spielereins extends JFrame implements KeyListener, MouseListener, MouseMotionListener
{

    private int x=700,y=350,xm=10,ym=10,y1=300,y2=300, a=3,b=0;
    private boolean pause=true;
    //x1=1140, y1=834, nx=1100, ny=25, xm=10, ym=10, x2=140 , y2=834, x=0 , y=0;
    private JLabel jl;

    public Spielereins(){
        super("Pong - Game");
        setLocation(0,0);
        setSize(1000,700);
        getContentPane().setBackground(Color.BLACK);
        setResizable(false);
        setDefaultCloseOperation(3);
        setLayout(null);
        setVisible(true);

        this.addKeyListener(this); //Key Listener
        this.addMouseListener(this); //Mouse Listener
        this.addMouseMotionListener(this); //MouseMotionListener

        move();
        repaint();

    }

    public void paint(Graphics g){
        /*g.clearRect(0,0,getWidth(),getHeight());
        g.fillRect(140,y1,10,100); //rechtes Paddle
        g.fillRect(1140,y2,10,100); //linkes Paddle

        g.setColor(Color.RED);
        g.fillOval(x,y,25,25);*/

        g.clearRect(0,0,getWidth(),getHeight());

        g.setColor(Color.RED);
        g.fillRect(0,0,1000,5);
        g.fillRect(0,0,5,700);
        g.fillRect(0,695,1000,5);
        g.fillRect(995,0,5,700);

        g.setColor(Color.PINK);
        g.fillRect(0,250,20,200);
        g.fillRect(980,250,20,200);

        g.drawLine(500,0,500,700);
        g.drawOval(400,250,200,200);
        g.drawRect(0,150,100,400);
        g.drawRect(900,150,100,400);

        g.setColor(Color.BLACK);
        g.fillRect(getWidth()/3,y1,20,100);
        g.fillRect(getWidth()/3*2-20,y2,20,100);

        g.setFont(new Font("Arial Black",1,40));
        g.setColor(Color.RED);
        g.drawString(""+b,40,100);
        g.drawString(""+a,950,100);

        g.setColor(Color.RED);
        g.fillOval(x,y,50,50);

    }

    public void keyReleased(KeyEvent e){

    }

    public void keyTyped(KeyEvent e){

    }

    public void keyPressed(KeyEvent e){
        //Figur 1
        /*if(e.getKeyCode()==KeyEvent.VK_W){
        if(x+10<getWidth()-50){
        y-=25;

        }
        }*/

        if(e.getKeyCode()==KeyEvent.VK_S){ //runter S1
            if(x-10>0){
                y1+=30;

            }
        }
        if(e.getKeyCode()==KeyEvent.VK_W){ //hoch S1
            if(x-10>0){
                y1-=30;

            }
        }
        if(e.getKeyCode()==KeyEvent.VK_P){ //Pause
            pause=false;
        }

        if(e.getKeyCode()==KeyEvent.VK_O){ //Pause
            pause=true;
        }
        
        /*}if(e.getKeyCode()==KeyEvent.VK_S){
        if(x+10<getWidth()-50){
        y+=25;

        }
        }*/

        repaint();
    }

    public void mouseMoved(MouseEvent e){ 

        y2 = e.getY();//holt y von Maus
        repaint();

    }

    public void mouseDragged(MouseEvent e){

    }

    public void mousePressed(MouseEvent e) {

    }

    public void mouseReleased(MouseEvent e) {

    }

    public void mouseEntered(MouseEvent e) {

    }

    public void mouseExited(MouseEvent e) {

    }

    public void mouseClicked(MouseEvent e) {
    }

    public void move(){
        while(pause){

            try{
                Thread.sleep(50);

                if(y>getHeight()-50||y<0){
                    ym*=-1; //Ball titscht von Wand ab

                }

                if(x>getWidth()-50||x<0){
                    xm*=-1; //Ball titscht von Wand ab

                }

                if(x+50<getWidth()/3 && x+50+xm>getWidth()/3 && y+25>y1 && y+25<y1+100){                   //Spieler 1 links nach rechts
                    xm*=-1;
                }if(x>getWidth()/3+20 && x+xm<getWidth()/3+20 && y+25>y1 && y+25<y1+100){                   //Spieler 1 rechts nach links
                    xm*=-1;
                }if(x+50<getWidth()/3*2-20 && x+xm+50>getWidth()/3*2-20 && y+25>y2 && y+25<y2+100){         //Spieler 2 links nach rechts
                    xm*=-1;
                }if(x>getWidth()/3*2 && x+xm<getWidth()/3*2 && y+25>y2 && y+25<y2+100){                     //Spieler 2 rechts nach links
                    xm*=-1;
                }if(x+25>getWidth()/3-15 && x+25<getWidth()/3+35 && y+50<y1+10 && y+50+ym>y1+10){           //Spieler 1 oben nach unten
                    ym*=-1;
                }if(x+25>getWidth()/3-15 && x+25<getWidth()/3+35 && y>y1+90 && y+ym<y1+90){                 //Spieler 1 unten nach oben
                    ym*=-1;
                }if(x+25>getWidth()/3*2-35 && x+25<getWidth()/3*2+15 && y+50<y2+10 && y+50+ym>y2+10){       //Spieler 2 oben nach unten
                    ym*=-1;
                }if(x+25>getWidth()/3*2-35 && x+25<getWidth()/3*2+15 && y>y2+90 && y+ym<y2+90){             //Spieler 2 unten nach oben
                    ym*=-1;
                }

                if(y>=250&&y<400&&x==0){
                    a+=1;
                    y=600;
                    x=200;
                    xm*=-1;
                    ym*=-1;
                }

                if(y>=250&&y<400&&x+50==1000){
                    b+=1;
                    y=400;
                    x=400;
                    xm*=-1;
                    ym*=-1;

                }
                y+=ym;
                x+=xm;
                //repaint();
                
            }catch(InterruptedException e){

            }

        }

    }
    
    
}

Und den meiner GUI:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Write a description of class GUI here.
 * 
 * @author Niklas Seeliger, Nico Wynands
 * @version Alpha 0.1
 */

public class GUI extends JFrame implements ActionListener{

    private JButton spielen, optionen, credits, steuerung, schliessen ;
    private JFrame jfenster;
    private SteuerungF str;

    public GUI(){
        super("Pong");
        setBounds(5,5,800,600);
        getContentPane().setBackground(Color.BLACK);
        setResizable(false);
        setDefaultCloseOperation(0);
        setLayout(null);
        setVisible(true);

        spielen = new JButton("Spiel Starten");
        optionen = new JButton("Optionen");
        steuerung = new JButton("Steuerung");
        credits = new JButton("Mitwirkende");
        schliessen = new JButton("Spiel beenden");        

        spielen    .setBounds(325,200,150,50);
        optionen   .setBounds(325,280,150,50);
        steuerung  .setBounds(325,360,150,50);
        credits    .setBounds(325,440,150,50);
        schliessen .setBounds(325,520,150,50);

        add(spielen);
        add(optionen);
        add(steuerung);
        add(credits);
        add(schliessen);

        spielen     .addActionListener(this);
        optionen    .addActionListener(this);
        steuerung   .addActionListener(this);
        credits     .addActionListener(this);
        schliessen  .addActionListener(this);  
        
        

    }
    
    public void dummy(){
        new Spielereins();
        
    }

    

    public void actionPerformed(ActionEvent e){
        if(e.getSource()== schliessen){
            System.exit(0);
        }
        if(e.getSource() == steuerung){
            
            SteuerungF str = new SteuerungF();
        }
        if(e.getSource() == credits){
            Credits c = new Credits();
        }
        if(e.getSource() == spielen){
            dummy();
        }
    }
}

Ich habe keine Ahnung wo der Fehler liegt, Spiel läuft ja auch ohne Probleme, nur lässt es sich nicht aufrufen. Ich hoffe ihr werdet daraus schlau.

Danke

lg
Niklas

ps: main methode auch vorhanden:D
 

eMmiE

Bekanntes Mitglied
Ist doch klar, dass der Screen so bleibt...

Guck doch mal in den Konstruktor deiner Spielereins-Klasse

Zuerst initialisierst du die Variablen...
Dann rufst du die Methode move() auf.

Die Methode läuft so lange, bis pause == false.
Danach ruft er die paint()-Methode auf.

D.h. dass der JFrame erst gefärbt wird, wenn das Spiel eigentlich schon vorbei ist...

Um das zu ändern, solltest du dir entweder mal das Interface Runnable angucken oder die Methode einfach in dein move() implementieren

Gruß eMmiE
 

geqoo

Bekanntes Mitglied
Du sollst dir einfach nur das Runnable interface anschauen.
Damit kannst du erreichen, dass du deine repaint-Methode und die move-Methode parallel ausführen kannst.
 

FlexiTus

Mitglied
Du sollst dir einfach nur das Runnable interface anschauen.
Damit kannst du erreichen, dass du deine repaint-Methode und die move-Methode parallel ausführen kannst.

Hab mich jetzt ne zeit lang damit beschäftigt, habe immer noch dasselbe Problem.

habe das eingefügt:
Java:
public void run(){
         move();
         repaint();

}

Im Konstruktor repaint() und move() durch run() ersetzt. Oder wie war das gemeint?
 

eMmiE

Bekanntes Mitglied
Runnable siehts so aus, dass du einen Thread, d.h. ein Element, das einen Programmteil (-> die run-methode) ausführt.

Diesen Thread musst du im Konstruktor starten, vorzugsweise nachdem du alles andere initialisiert hast.
Runnable gewährt einfach nur einen möglichst reibungslosen Ablauf des Threads.
Wenn jetzt in deiner run-Methode eine (quasi-)Unendlichschleife drin ist, a lá while(true) oder while(running);running = true; dann führt das Programm immer wieder das aus, bis du es unterbrichst.

Probier einfach mal aus, dass du mithilfe des Interfaces Runnable ein Programm schreibst, das in der Schleife immer wieder per sysout "läuft" schreibt, bis du eine bestimmte Taste drückst.

So ähnlich läuft das dann auch mit deinem anderen Programm.
Code:
while(true) {
move();
repaint();
}

Dabei musst du natürlich darauf achten, dass im move() keine Unendlichschleife entstehen kann, da sonst nicht repainted wird.

Probier mal das hier aus, zu Verdeutlichung:
Code:
int xPos = 0;
Thread t = new Thread(this); //<- im Konstruktor
t.start();

while(running) {
move();
repaint();
try {
t.sleep(5000);
} catch (Exception e) {}
}

void move() {
xPos++;
}

void paint() {
System.out.println("Male Objekt bei "+xPos);
}

Gruß eMmiE

P.S.: Viel Spaß ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
J Das Spiel 17und 4 Allgemeine Java-Themen 3
J Spieler aus der Spielerliste entfernen in dem Spiel 17und 4 Allgemeine Java-Themen 2
August Wave-Spiel Allgemeine Java-Themen 1
kev34 nim-Spiel problem Allgemeine Java-Themen 1
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
E Kalaha Spiel Implementation Allgemeine Java-Themen 4
A Steuerung von Spiel aus Datei lesen Allgemeine Java-Themen 0
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
SkyScreamer Java Spiel nutzt wenig Arbeitsspeicher Allgemeine Java-Themen 4
F Interpreter-Fehler Spiel - Fehlfunktion??? Allgemeine Java-Themen 1
C Java programmiertes Spiel ruckelt(Nur auf Laptop) Allgemeine Java-Themen 7
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
S Java Spiel des Lebens Allgemeine Java-Themen 10
GRAZZ0R Hilfe zum Spiel Mensch ärger dich nicht Allgemeine Java-Themen 1
G Error Meldung bei Gomoku Spiel Allgemeine Java-Themen 9
K Interpreter-Fehler Java Zahl Raten Spiel- Fehlermeldung mir unbekannt Allgemeine Java-Themen 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
K OOP OOP Gui Spiel + Vererbungen Probleme durch Nichtwissen!! Allgemeine Java-Themen 1
F Java Spiel Sprung problem Allgemeine Java-Themen 5
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
M Lichteffekte in einem Java-Spiel Allgemeine Java-Themen 4
T Takuzu Spiel programmieren Allgemeine Java-Themen 4
x22 OOP Spiel Allgemeine Java-Themen 2
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
X Neues Spiel/ Neustart Allgemeine Java-Themen 5
L Spiel Roulette Allgemeine Java-Themen 17
L Methode "Neues Spiel" für Memory Allgemeine Java-Themen 2
G java spiel (geschwindigkeit) Allgemeine Java-Themen 37
S Spiel - Ressourcen Allgemeine Java-Themen 10
B Spiel bleibt hängen Allgemeine Java-Themen 3
W Spiel für Handy, normale GUI und Web programmieren Allgemeine Java-Themen 2
M Ein Spiel vom Internet rippen Allgemeine Java-Themen 2
S KI für TicTacToe spiel Allgemeine Java-Themen 11
M [Threads / Spiel] Help! I need sombody.. Allgemeine Java-Themen 2
A Snake Spiel in Java Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
T Login lässt App crashen! Allgemeine Java-Themen 14
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
L Jar lässt sich nicht öffnen Allgemeine Java-Themen 12
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
K Java lässt sich nicht Installieren Windows7Ultimate 64Bit Allgemeine Java-Themen 1
L Garbage Collector lässt Programm kurz hängen Allgemeine Java-Themen 10
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
J setUndecorated lässt GUI "spacken" Allgemeine Java-Themen 52
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
D JMF - lässt sich nicht im ausgewählten Format aufnehmen Allgemeine Java-Themen 2
M Java lässt sich nicht installieren Allgemeine Java-Themen 10
J pack() lässt JFrame grau Allgemeine Java-Themen 3
V JRE lässt sich nicht installieren. Allgemeine Java-Themen 10
L JDK lässt sich nicht deinstallieren Allgemeine Java-Themen 3
T KeyListener lässt sich nur einmal drücken Allgemeine Java-Themen 2
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
D Shell-Prozess lässt Thread nicht enden Allgemeine Java-Themen 4
S HWPF Problem: doc lässt sich nach Bearbeitung nicht mehr lesen Allgemeine Java-Themen 6
T (nur) HP Photosmart Drucker lässt einzelne Seiten aus Allgemeine Java-Themen 6
G Thread lässt sich mit interrupt() nicht unterbrechen Allgemeine Java-Themen 6
S Lässt sich eigne JPanel Klasse in ein Array "stecken&qu Allgemeine Java-Themen 5
Noar Klasse lässt sich nicht kompilieren Allgemeine Java-Themen 2
J jacob - lässt sich nicht installieren Allgemeine Java-Themen 8
J Simpler Thread lässt sich NIE über interrupt() unterbrechen Allgemeine Java-Themen 8
H Java lässt sich nicht öffnen. Allgemeine Java-Themen 16
S Javaprogramm lässt sich nicht per .bat Datei ausführen. Allgemeine Java-Themen 22
E Programm lässt sich nicht starten ! Allgemeine Java-Themen 16
S habe programm aber es lässt sich net mit bild einbinden! Allgemeine Java-Themen 4
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
H DataOutputStream Ob lässt sich nicht vergleichen mit Strings Allgemeine Java-Themen 5
B jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 10
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
A Eclipse hängt sich auf Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Viper13125 Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse Allgemeine Java-Themen 2
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
D Anfänger versucht sich an Xtext Allgemeine Java-Themen 0
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben