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
Erst den meines Spiels: (nur relevante Klassen für das Projekt hier drin)
Und den meiner GUI:
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
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
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