Swing Probleme beim erstellen eines neuen Objektes durch einen Button

Hallo Java-Forum,
ich stehe vor einem Problem, ein Freund und ich haben mit GLOOP(ist irgendeine Grafik-Biblio) ein Spiel erstellt und wollen nun dafür eine GUI programmieren, leichter gesagt als getan.
Als erstes haben wir einen Button eingefügt der ein Objekt des Spiel starten soll.
Da ich hier nun so viel schreiben kann wie ich will es aber doch nichts bringen würde, poste ich einfach den Quellcode:
Java:
import GLOOP.*; 
import javax.swing.*;
import javax.swing.JFrame.*;
import javax.swing.JLabel.*;
import javax.swing.JDialog.*;
import javax.swing.JToggleButton.*;
import javax.swing.JButton.*;
import javax.swing.JPanel.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public  class GUI extends JFrame implements ActionListener
{
    public boolean ActionEvent;
    
    public GUI()
    {
       JFrame mFrame = new JFrame("GUI");
       JPanel panel = new JPanel();
       JButton button = new JButton("Start");
       setDefaultCloseOperation(mFrame.EXIT_ON_CLOSE);
        
        mFrame.setSize(800,600);
        panel.add(button);
        mFrame.add(panel);
        
        mFrame.setVisible(true);
        button.addActionListener(this);
        
    }
    public void actionPerformed (ActionEvent e)
    {
             //Hauptprogramm Hauptprogramm1 = new Hauptprogramm();
             new Hauptprogramm();
    } 
}
 
Wenn mich nicht alles täuscht, kannst du das new vor "Hauptprogramm()" weglassen.

Ich kenn das mit dem Button-Event erstellen nur so:

[Java]
JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Hauptprogramm();
}
});
[/code]
 
Zuletzt bearbeitet:
Wenn mich nicht alles täuscht, kannst du das new vor "Hauptprogramm()" weglassen.

Das gilt nur wenn "Hauptprogramm" eine Methode und keine Klasse ist. 🙂

Generell muss man hier beim TO nachfragen:
Du willst beim Klick auf den Button ein Objekt des Spiels starten.
Wie startest du denn ein Objekt des Spiels ohne UI? Wo genau liegt das Problem beim Erstellen eines neuen Objektes?
 
Das stimmt wohl 🙂 Ich bin davon ausgegangen, dass eine Methode in der gleichen Klasse ist. Ansonsten würde es bei seinem Code ja auch nicht aufrufen, oder ?
 
Das stimmt wohl 🙂 Ich bin davon ausgegangen, dass eine Methode in der gleichen Klasse ist. Ansonsten würde es bei seinem Code ja auch nicht aufrufen, oder ?
Doch, natürlich würde es das, wenn es eine Klasse "Hauptprogramm" im aktuellen package gibt oder diese Klasse importiert wurde. Lies dir das Kapitel über Methoden und Konstruktoren noch mal durch.
Und mir ist auch unklar, wo das Problem liegt.
 
So bin zu Hause, also das Problem ist folgendes:
1. Ich kann das Programm ganz normal starten in dem ich ein Objekt der Klasse "Hauptprogramm" erstelle.
2. Wenn ich ein Objekt der Klasse "Hauptprogramm" aus einer anderen Klasse heraus erstelle, in welcher der einzige Befehl ist ein Objekt Hauptprogramm zu starten, funktioniert dies.
3. Wenn ich aber jetzt aus meiner GUI-Klasse heraus die GUI öffne und per Button ein Objekt der Klasse "Hauptprogramm" öffnen will passiert dies:
Anhang anzeigen 7005
Das Bild ist weiß.
Normal sollte es so aussehen:
Anhang anzeigen 7006
Außerdem häng sich das Programm GUI + Spiel auf und lässt sich nur noch über den Taskmanager schließen.
Joa das ist kurz erklärt mein Problem.
 
Die Anhänge sind zwar ungültig, aber ich würde wetten, dass "Hauptprogramm", welches ja offenbar auch eine Gui hat, selbst eine Instanz von GUI anlegt, die eine Instanz von Hauptprogramm erzeugt, die wiederum eine Instanz von GUI erzeugt, usw. bis der Speicher voll ist.
 
Rufe ich z.B. GUI auf, so startet keine andere Klasse(hoffe ich zumindest).
Was in GUI passiert, sieht man am Quellcode.
Die Frage ist, was passiert in Hauptprogramm.
Ein Verhalten wie du es beschreibst, daß kurz gesagt gar nichts mehr geht, klingt verdächtig nach einer Endlosschleife.
Solange der Quellcode von Hauptprogramm nicht vorliegt, kann nicht gesagt werden, ob dort etwas komisches passiert.
Es wäre aber zumindest möglich, das im parameterlosen Konstruktor Hauptprogramm eine neue Instanz von GUI erzeugt und deren actionPerformed-Methode aufgerufen wird.
In der actionPerformed-methode von GUI wird das übergebene ActionEvent in keinster Weise überprüft. Es wäre gut möglich, dort einfach null zu übergeben, um auf diese Weise eine neue Instanz von Hauptprogramm zu starten.
Auch die Variable
Java:
public boolean ActionEvent
aus der GUI Klasse sieht komisch aus. Mal ganz abgesehen davon, dass ihre Benennung nicht den Java-Namenskonventionen entspricht, wird sie nirgends initialisiert oder verwendet, könnte aber, da sie public ist, von einer anderen Klasse verwendet oder gesetzt werden.
Aber wie gesagt, alles nur Spekulation.
 

Zurück
Oben