Int Zähler auf Label platzieren

memoryfan

Grünschnabel
Hallo erstmal,

habe hier ein kleines Problem beim Ausgeben des Zugzählers in meinem Memory Spiel..

Ich habe eine Klasse Game4x4 mit einer innneren Klasse CardGame wo die Variable pairsFound mit einer getter Methode ausgestattet ist.

In der Klasse Hauptmenu wird die Klasse CardGame instanziert.

private Game4x4.CardGame cg = null;

danach möchte ich auf einem Label den Zähler pairsFound ausgeben.
und zwar so:

private JPanel getOptionPanel() {
if (optionPanel == null) {

zugzählerLB = new JLabel();
zugzählerLB.setBounds(new Rectangle(20, 100, 136, 37));
zugzählerLB.setText("Zugzähler" );
verfehltLB = new JLabel();
verfehltLB.setBounds(new Rectangle(22, 57, 133, 37));
verfehltLB.setText("Paare verfehlt" + cardGame.getPairsFound()+"" );


Die Heftige Fehlermeldung sieht dann so aus:

IWAV0052E Invocation Target Exception creating ngmemory.Mainmenu
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at ngmemory.Mainmenu.getOptionPanel(Mainmenu.java:270)
at ngmemory.Mainmenu.getJContentPane(Mainmenu.java:314)
at ngmemory.Mainmenu.initialize(Mainmenu.java:290)
at ngmemory.Mainmenu.<init>(Mainmenu.java:73)
... 13 more :confused:


Zähler funktioniert und kann in der Klasse Game4x4 per System.out.println ausgegeben werden...


Kann mir da Jemand weiterhelfen...

vielen dank im Voraus.
 
Zuletzt bearbeitet:
In der Klasse Hauptmenu wird die Klasse CardGame instanziert.

private Game4x4.CardGame cg = null;
Das ist kein instanziieren sondern nur deklarieren. Du hast kein Objekt zugewiesen sondern null, also nix. Daher die entsprechende Fehlermeldung, nämlich eine NullPointerException die du bekommst.

Also instanziiere mit new ein neues Objekt und weise es cg zu.
 
Stimmt, hatte ja versucht zu instanzieren, das hat aber für die innere Classe CardGame nicht geklappt,

private Game4x4.CardGame cg = new Game4x4.CardGame();

gibt Eclipse als hilfe an..

No enclosing instance of type Game4x4 is accessible. Must qualify the allocation with an enclosing instance of type Game4x4 (e.g. x.new A() where x is an instance of Game4x4).

ist mit Sicherheit ein dummer Notationsfehler den mich hier plagt.. was will er den vor dem .new stehen haben Klassenahme wohl nicht..

grüße

martin
 
Java:
public class X {

   private String a = "a";

   public class Y {

   }

}

Eine Innere Klasse Y hat Zugriff auf das Feld a der äußeren Klasse X, daher muss eine Instanz von X existieren um Y instanziieren zu können. Das ganze für dann tatsächlich so aussehen:

Java:
X x = new X();
Y y = x.new Y();

Wenn deine innere Klasse Y gar nichts mit der äußeren X zu tun haben soll, also die Felder gar nicht benutzen können soll, ohne explizit ein Objekt zu haben musst du ein static dazuschreiben.

Java:
public class X {

   public static class Y {

   }

}

Dann geht auch ohne Probleme
Java:
Y y = new Y();

Y ist dann keine innere Klasse mehr, sondern eine in X eingebettete Klasse.
 
Zurück