Klassen Klassen Aufruf Fehlgeschlagen

cool_brivk24

Mitglied
Hallo liebe User. Ich programmiere grade ein Menü für Spiele und habe schon das erste Spiel Pong programmiert. Ich suche schon lange im Internet finde aber nicht die richtigen antworten.
Ich habe einen JButton programmiert der eine Klasse aufrufen soll(Codes unten). Wenn der Button gedrückt wurde soll eine bestimmte Klase(Im meinem fall PongStart) aufgerufen werden, aber es tut sich nix. Ich habe schon das hier probiert
also
new PongStart();
System.out.println("Test");

es wird mir zwar Test ausgegeben, aber die Pongstart Klasse wird nicht ausgeführt. Wenn ich aber auf die PongStart Klasse gehe und dann auf run Klicke wird sie geöffnet. Ich hoffe ihr könnt mir helfen. MFG cool_brivk24



PS: Hier die Codes:

ActionListener(Wenn der Button gedrückt wird)



package pack1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionHandler implements ActionListener{
public ActionHandler() {

}
@Override
public void actionPerformed(ActionEvent e) {

if(e.getSource() == Main.button) {

new PongStart();
System.out.println("TestTest");

}

}
}

und hier wo mein/e Buton/s festgelegt sind:


package pack1;
import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;
public class Main {

static JButton button;
public Main() {
JFrame frame = new JFrame("SpielAuswahl");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.requestFocus();


button = new JButton("Pong");
button.setBounds(120, 40, 160, 40);
button.setBackground(Color.LIGHT_GRAY);
button.setFocusPainted(false);
button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
button.addActionListener(new ActionHandler());

//Button Coordinaten (120, 40, 160, 40) rechne + 80 um runter zu kommen.


button.setVisible(true);
frame.add(button);

frame.setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
 
Code bitte in Code Tags. (siehe meine Signatur)
Wenn dir Test ausgegeben wird dann liegt der Fehler nicht am geposteten Code.
Wie sieht denn die Klasse PingStart aus?
 
Moin,

Erstens: nutze bitte die Code-Tags, so bekommt man ja Augenkrebs 😕
Zweitens: habe versucht, Deinen Code zu überfliegen, ist aber gar nicht so leicht, zu begreifen, was da wie zusammenhängt (siehe auch erstens 😉)
Was genau ist denn new PongStart() rsp. soll das tun???
VG Klaus

EDIT: shit, too late ... 🙁
 
Code:
ActionListener(Wenn der Button gedrückt wird)
package pack1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ActionHandler implements ActionListener{
public ActionHandler() {
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == Main.button) {
new PongStart();
System.out.println("TestTest");

}

}
}

und hier wo mein/e Button/s festgelegt sind:


package pack1;
import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;
public class Main {

static JButton button;
public Main() {
JFrame frame = new JFrame("SpielAuswahl");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setLayout(null);
frame.requestFocus();


button = new JButton("Pong");
button.setBounds(120, 40, 160, 40);
button.setBackground(Color.LIGHT_GRAY);
button.setFocusPainted(false);
button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
button.addActionListener(new ActionHandler());

//Button Coordinaten (120, 40, 160, 40) rechne + 80 um runter zu kommen.


button.setVisible(true);
frame.add(button);

frame.setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}

Hier, für alle die noch helfen wollen.
 
Hallo habe mir mal die Mühe gemacht und deinen Code formatiert :
Java:
ActionListener(Wenn der Button gedrückt wird)package pack1;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ActionHandler implements ActionListener {
    public ActionHandler() {
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == Main.button) {
            new PongStart();
            System.out.println("TestTest");

        }

    }
}

und    hier
wo mein/e Button/s festgelegt sind:

package pack1;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;

public class Main {

    static JButton button;

    public Main() {
        JFrame frame = new JFrame("SpielAuswahl");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.requestFocus();

        button = new JButton("Pong");
        button.setBounds(120, 40, 160, 40);
        button.setBackground(Color.LIGHT_GRAY);
        button.setFocusPainted(false);
        button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        button.addActionListener(new ActionHandler());

        // Button Coordinaten (120, 40, 160, 40) rechne + 80 um runter zu kommen.

        button.setVisible(true);
        frame.add(button);

        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Main();
    }
}

Versuch mal folgendes :
Java:
        button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
              
            }
        });
 
//Hier meine PongStart Klasse

Java:
package pack1;

public class PongStart {

    public static void main(String[] args) {

        new Var();
        new Gui();
        new Movement();
        new GegnerMovement();
        new BallMovement();
        new BallKollision();
        new KeyHandler();
       
        System.out.println("DoppelTest");
    }

}


Ich will die PongStart Klasse starten bzw. aufrufen um meine Programme die Pong Steuern bzw. class zu öffnen.

Also nochmal nicht so komplex: Ich will das komplette Spiel starten.
 
Das was ich vermutet habe..
new PongStart() erstellt eine neue Instanz von PongStart und der Konstruktor wird aufgerufen.
In deiner PongStart-Klasse hast du aber keinen Konstruktor definiert sondern alles in die main - Methode geschrieben (die an der Stelle fehl am Platz ist, da du dein Programm ja aus einer anderen Klasse heraus starten willst.).
Erstell in PongStart einen Konstruktor und schieb den Code aus der Main da rein.
 
Und noch der Hinweis um es deutlich zu machen: Du brauchst immer nur 1 main-Methode, eben in der Klasse welche du startest. In allen anderen Klassen benötigst du keine main-Methode mehr. Denn die main-Methode ist nur der Einstiegspunkt ins Programm.
Den Rest hat Robat schon erklärt.
 
Ich habe jetzt den Code geändert(Entschuldigt die Fehler im Code, ich bin nicht so erfahren):

Java:
package pack1;
import java.awt.Color;
import java.awt.event.ActionEvent;

import javax.swing.*;
public class Main {
 
 static JButton button;
 public Main() {
  JFrame frame = new JFrame("SpielAuswahl");
  frame.setSize(800, 600);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setResizable(false);
  frame.setLocationRelativeTo(null);
  frame.setLayout(null);
  frame.requestFocus();
        
  
  button = new JButton("Pong");
  button.setBounds(120, 40, 160, 40);
  button.setBackground(Color.LIGHT_GRAY);
  button.setFocusPainted(false);
  button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
  
  
  //Button Coordinaten (120, 40, 160, 40) rechne + 80 um runter zu kommen.
  
  
  button.setVisible(true);
  frame.add(button);
  
  frame.setVisible(true);
 }
 public static void main(String[] args) {
  
  
  
    
   }
 public void actionPerformed(ActionEvent e) {
  
  if(e.getSource() == Main.button) {
   
   new PongStart();
   System.out.println("TestTest");
   
  }
  
 }
}
Ich kann die Klasse Main nicht aufrufen bzw. runnen
 

Neue Themen


Zurück
Oben