Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.10.2011, 21:11

[Java] Starten:Applet nicht initialisiert

Hallo,
möchte gern ein kleines Memory mit Java basteln.
Bin aber noch nicht wirklich weit und schon startet es nicht einmal.
Immer steht im AppletViewer: Starten: Applet nicht initialsiert
Muss dazu sagen, dass wir Java gerade in der Schule besprechen aber ich hatte erst ein, zwei Stunden
aber ich beherrsche C++ einiger maßen. Java ist aber doch ein bisschen anders.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.lang.String;

public class Memory extends Applet
                    implements ActionListener
{
  public class Card
  {
  public Button bCard;
  public Color cColor;
  public int fPosX;
  public int fPosY;
  public int fThickness = 200;
  public boolean bAufgedeckt;
  }
  static int iNumberOfCards = 4;
  int fXCoords[] = {50,350,50,350};
  int fYCoords[] = {50,50,350,350};

  public void init()
  {
    setSize(600,600);
    setLayout(null);
    Card CCard[] = new Card[iNumberOfCards];
    for(int i=0; i<iNumberOfCards; i++)
    {
    CCard[i].bCard = new Button("?");
    CCard[i].fPosX = fXCoords[i];
    CCard[i].fPosY = fYCoords[i];
    CCard[i].bCard.setBounds(CCard[i].fPosX,
                            CCard[i].fPosY,
                            CCard[i].fThickness,
                            CCard[i].fThickness);
    add(CCard[i].bCard);
    CCard[i].bCard.addActionListener(this);
    CCard[i].bAufgedeckt = false;
    }
  }
  
  public void actionPerformed(ActionEvent event)
  {
  Object cmd = event.getSource();

  }
}


//Edit: Die Klasse Card soll eine Struktur, wie ich sie aus c++ kenne, ersetzten.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

08.10.2011, 22:38

warum die Meldung gezeigt wird, kann ich auf Anhieb nicht beantworten

zur inneren Klasse:
du kannst das durchaus als innere Klasse implementieren
du solltest dir aber auch Gedanken machen, ob es eine innere Klasse sein muss oder ob es auch eine normale Klasse sein kann

außerdem solltest du die Daten kapseln, indem du für jede Variable Getter und Setter schreibst (eclipse bietet dafür einen Menüpunkt, um dies automatisch durchzuführen, das erspart Tipparbeit) und diese nicht öffentlich zugänglich machst (statt public private)
da du die Variablen teilweise nicht auf den Standardwerten belässt, könntest du außerdem einen Konstruktor implementieren, der entsprechende Werte entgegen nimmt
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

3

08.10.2011, 23:11

Ok. Dann mach ich das mal als eine Private Class mit private Variablen und versuchs dann Setter und Getter. Vllt behebt es das ja. Mal schauen
Auf jeden Fall danke ich dir schon mal.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

08.10.2011, 23:27

die innere Klasse muss nicht zwingendermaßen private sein
je nachdem, was du noch machen wirst und welche weiteren klassen entstehen, kann es auch sein, dass sie vielleicht public sein sollte

außerdem ist es grundsätzlich empfehlenswert, nicht das standardpackage/kein package zu verwenden
da das aber vermutlich nur ein Test ist (und ein Package sich nachträglich hinzufügen lässt), kannst du das aber auch so belassen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

5

08.10.2011, 23:47

Sorry aber was meinst du mit package? Hab das schon mal beim googln gelsen aber konnte nicht wirklich ne gute antwort darauf finden.

java.lang.NullPointerException
at Memory.init(Memory.java:30)
at sun.applet.AppletPanel.run(AppletPanel.java:434)
at java.lang.Thread.run(Thread.java:722)

Hillft das weiter? Das spuckt mein Java-Editor" unter Interpreter aus. Aber keine Fehlermeldung.

// ICh glabe, dass es an dieser Zeile liegen könnte: CCard.bCard = new Button("?");

Nochmal edit: wenn ich folgendes auskomentiere, klappt alles.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    for(int i=0; i<iNumberOfCards; i++)
    {
    //CCard[i].bCard = new Button("?");
    //CCard[i].fPosX = fXCoords[i];
    //CCard[i].fPosY = fYCoords[i];
    //CCard[i].bCard.setBounds(CCard[i].fPosX,
                            //CCard[i].fPosY,
                            //CCard[i].fThickness,
                            //CCard[i].fThickness);
    //add(CCard[i].bCard);
    //CCard[i].bCard.addActionListener(this);
    //CCard[i].bAufgedeckt = false;
    }


Ich denke mal es liegt an der Zeile:

Card CCard[] = new Card[iNumberOfCards];
Weil er ja etwas meint, wegen NullPointer.

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »ahhhilfe« (09.10.2011, 00:11)


6

09.10.2011, 00:14

Du musst vorher noch das jew. Card Objekt selbst konstruieren. Bei Java sind die Objekte ja nicht auf dem Stack und können auch nicht direkt allokiert werden.
also

Quellcode

1
CCard[i]=new Card();


Du solltest dir "Code Conventions for the Java Programming Language" durchlesen: http://www.oracle.com/technetwork/java/c…ions-150003.pdf

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chromanoid« (09.10.2011, 00:21)


7

09.10.2011, 00:16

Vielen Dank. Jetzt klappt es.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

09.10.2011, 01:35

NullPointer ist die Bezeichnung für einen Null-Pointer, der unter Java mit dem Schlüsselwort null abgebildet wird
jede Variable eines nicht-primitiven Typs hat als Wert standardmäßig diesen Wert zugewiesen und man muss selbst ein Objekt zuweisen
du hattest zwar das Array initialisiert, aber den einzelnen Feldern keine Objekte zugewiesen
dadurch kam es bei einem Versuch, auf eine Methode zuzugreifen, obwohl kein Objekt vorhanden war, zu dieser Exception
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige