Initialisierungsproblem

Endymion

Bekanntes Mitglied
Java:
import javax.swing.*;
import java.awt.event.*;
public class UI extends JFrame {
	private Main main;
	private JLabel l;
	private JButton easyButton;
	private JButton normalButton;
	private JButton hardButton;
	public void deleteL() {
		l = null;
	}
	public void deleteEasyButton() {
		easyButton = null;
	}
	public void deleteNormalButton() {
		normalButton = null;
	}
	public void deleteHardButton() {
		hardButton = null;
	}
	public UI() {
		setLayout(null);
		setTitle("Mariosweeper");
		setBounds(0, 0, 650, 370);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		l = new JLabel("Schwierigkeitsgrad wählen!");
		l.setBounds(0, 0, 175, 15);
		add(l);
		easyButton = new JButton("leicht");
		normalButton = new JButton("mittel");
		hardButton = new JButton("schwer");
		easyButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				main.setDifficulty(1);
				main.startGame();
			}
		});
		normalButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				main.setDifficulty(2);
				main.startGame();
			}
		});
		hardButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				main.setDifficulty(3);
				main.startGame();
			}
		});
		easyButton.setBounds(0, 30, 100, 30);
		normalButton.setBounds(115, 30, 100, 30);
		hardButton.setBounds(230, 30, 100, 30);
		add(easyButton);
		add(normalButton);
		add(hardButton);
		setVisible(true);
	}
}
Java:
public class Main {
	private int difficulty;
	private UI ui;
	public int getDifficulty() {
		return difficulty;
	}
	public void setDifficulty(int difficulty) {
		this.difficulty = difficulty;
	}
	public static void main(String[] args) {
		Main main = new Main();
	}
	public Main() {
		ui = new UI();
	}
	public void startGame() {
		ui.deleteL();
	}
}
Wenn ich das Programm starte, wird main im Objekt ui komischerweise nicht initialisiert. Warum?
 

Lit-Web

Aktives Mitglied
Doch initialisiert wird alles.
Das du nichts angezeigt bekommst liegt daran das du eben nur initialisierst und nicht aufrufst.

Java:
public class Main {
    private int difficulty;
    private UI ui;
    public int getDifficulty() {
        return difficulty;
    }
    public void setDifficulty(int difficulty) {
        this.difficulty = difficulty;
    }
    public static void main(String[] args) {
        new Main();
    }
    public Main() {
        ui = new UI();
        startGame();
    }
    public void startGame() {
        ui.deleteL();
    }
}

Versuche es mal so, müsste eigentlich funktionieren. Habe es aber nicht getstet.
 

Endymion

Bekanntes Mitglied
Ok, das habe ich aus Schusseligkeit vergessen, aber daran lag es nicht. Ich bekomme die NullPointerException ja schon beim Aufruf von setDifficulty(1) in ui.
 

Lit-Web

Aktives Mitglied
Ist klar denn in der Klasse UI initialiserst du auch kein Objekt Main, sondern du deklarierst das nur.
Außerdem würde das so auch nichts bringen, weil du dann zwei Instanzen von Main hast, einmal in der Klasse Main und einmal dann in der Klasse UI, somit hättest du 2 unterschiedliche Objekte.
Du musst in der Main Klasse das Main Objekt an die UI Klasse übergeben um dort damit arbeiten zu können.
 

fisch100

Mitglied
Du hast in UI main nicht gestartet - wird wohl daran liegen - jedoch willst du nicht erneut main aufrufen, sondern das alte verwenden? (wie auch immer)

Hab zwar noch nicht viel ahnung aber ich denke es wird daran liegen =)
 

Endymion

Bekanntes Mitglied
Ok, danke, hat geklappt, aber es hat sich direkt ein neues Problem aufgetan:
Ich habe die Methode deleteL in UI folgendermaßen umgeändert:
Java:
public void deleteL() {
    remove(l);
}
Wenn ich jetzt den Button drücke, muss ich das Fenster zuerst minimieren, bevor l entfernt wird.
 
Zuletzt bearbeitet:

fisch100

Mitglied
Ich kenn mich mit JLabel nicht wirklich (eigentlich gar nicht aus) aber ich vermute das du zuerst eine leere Fläche zeichnen musst (oder minimieren und wieder vergrößern) damit du die "Pixel-daten" entfernt bekommst (da java seine daten ja nicht speichert - soweit ich das mitbekommen hab).
 

r.w.

Bekanntes Mitglied
Ok, danke, hat geklappt, aber es hat sich direkt ein neues Problem aufgetan:
Ich habe die Methode deleteL in UI folgendermaßen umgeändert:
Java:
public void deleteL() {
    remove(l);
}
Wenn ich jetzt den Button drücke, muss ich das Fenster zuerst minimieren, bevor l entfernt wird.[/QUOTE]

Die revalidate()-Methode des UI sollte da weiterhelfen.

VG ROlf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JDK 6 oder das Initialisierungsproblem Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben