Minesweeperprogrammierung Fehler J0098

Status
Nicht offen für weitere Antworten.

Visio

Mitglied
Hallo Leute,

wusste leider nicht, ob ich ins Anfängerforum oder hierher schreiben soll *g*

Jedenfalls bin ich bei der Programmierung von Mineweeper und bin auf
ein kleines Problem gestoßen:

Ich habe 3 Klassen: Feld, spielfeld und MeinMouseListener

Im spielfeld habe ich ein Array aus Feldern deklariert und jedem Feld einen
Mouselistener hinzugefügt.

Wenn man auf ein Feld klickt, soll der MouseListener dieses Feld aufdecken.
Dafür habe ich den MouseListener das FeldArray mit übergeben und wollte
dann die nichtstatische Funktion "Aufdecken" in der klasse spielfeld durch folgenden
Funktionsaufruf aufrufen:

Code:
FeldArray2.Aufdecken(Zeile, Spalte, zahl);

Leider kommt dann die Fehlermeldung:
Zugriffsversuch auf ein nicht vorhandenes Element von "Feld[][]" (J0098).

Würde mich freuen, wenn mir jemand beim lösen meines Problems behilflich sein
könnte :D
 

Soulfly

Bekanntes Mitglied
Ist dein array überhaupt initiiert und gefüllt.
Oder sind die Koordinaten, die benutzt werden, größer als die Arraydimensionen?
Die Felder sind nämlich größer als ein Pixel.

ansonsten gibt mal die ganze Fehlermeldung raus.
 

GagamehlO

Aktives Mitglied
Was ist den die Klasse Feld?
Wurde sie von Component abgeleitet?
Und zum Mouse Listener hinzufügen.
mach doch einfach im Konstruktor der Klasse Feld:

this.addMouseListener(MouseListener-Interface).....


Den Fehler finde ich irgendwie merkwürdig.
Steht denn sonst nichts mehr dabei?
Denn wenn das Array noch nicht initialisiert wurde, würde der Compiler ja eine Null-Pointer Exception liefern (oder nicht?)

mhmmm????
Gib mal bitte die Komplette Fehlermeldung aus (hoffe sie war noch nicht komplett)
 

Visio

Mitglied
Hallo Leute,
danke für eure schnellen Antworten.
Leider war dies die komplette Fehlermeldung, die ausgegeben wird.
Habe hier mal die 3 Klassen (n paar Funktionen rausgelöscht, dass
es wenigstens n bisschen übersichtlicher wird :roll: ):

Klasse Feld:

Code:
import java.awt.*;

public class Feld extends Button
	
{
	protected int Zahl = 0;
	protected int Markiert = 0;
	protected int Aufgedeckt = 0;
}

Klasse MeinMouseListener:

Code:
import java.awt.event.*;

public class MeinMouseListener implements MouseListener
{	
	
	int zahl;
	Feld[][] FeldArray2;
	int Zeile;
	int Spalte;
	int Zeilen;
	int Spalten;
	Statusleiste Status;
	
	

	public MeinMouseListener(Feld[][] FeldArray, int z, int s,int i, int Z, int S, Statusleiste status)
	{
		zahl = i;
		FeldArray2 = FeldArray;
		Zeile = z;
		Spalte = s;
		Zeilen = Z;
		Spalten = S;
		Status = status;
	}
	
	public void mouseClicked(MouseEvent e)
	{
		int mask = InputEvent.BUTTON1_MASK - 1;
		int mods = e.getModifiers() & mask;
		if (mods == 0)
		{
			FeldArray2.Aufdecken(Zeile, Spalte, zahl);
		}
		
		else	//Rechtsklick
		{
			if (FeldArray2[Zeile][Spalte].Aufgedeckt != 1)
			{
				if (FeldArray2[Zeile][Spalte].Markiert == 0)
				{
				Aussehen.Fahne(FeldArray2, Zeile, Spalte, Status);
				}
				if (FeldArray2[Zeile][Spalte].Markiert == 1)
				{
				Aussehen.Fragezeichen(FeldArray2, Zeile, Spalte, Status);
				}
				if (FeldArray2[Zeile][Spalte].Markiert == 2)
				{
				Aussehen.Unberuehrt(FeldArray2, Zeile, Spalte);
				}
				FeldArray2[Zeile][Spalte].Markiert++;
				
				if (FeldArray2[Zeile][Spalte].Markiert == 3)
				{
				FeldArray2[Zeile][Spalte].Markiert = 0;	
				}
			}
		}
		//repaint();
	}
	
	public void mouseEntered( MouseEvent e ) {}
	public void mouseReleased( MouseEvent e ) {}
	public void mouseExited( MouseEvent e ) {}
	public void mousePressed( MouseEvent e ) {}
}

Und die Klasse spielfeld:
Code:
import java.awt.*;

public class spielfeld extends Panel
{
	protected Feld[][]FeldArray;
	protected int Minen;
	protected int x;
	protected int y;
	protected int Zeilen;
	protected int Spalten;
	Statusleiste Status;
	
	
	public spielfeld (int zeilen, int spalten, int AnzahlMinen, Statusleiste status)
	{
		
		Zeilen = zeilen;
		Spalten = spalten;
		Minen = AnzahlMinen;
		Status = status;	
		
		Font myFont = new Font("Arial", 8, 8);
		setFont(myFont);
		
		
		FeldArray = new Feld[Zeilen][Spalten];
	
		setLayout(new GridLayout(Zeilen,Spalten,0,0));
		for(int z=0;z<Zeilen;z++)
		{
		for (int s=0;s<Spalten;s++)
		{
			FeldArray[z][s] = new Feld();
			add(FeldArray[z][s]);
		}
		}	
		
		
		
		for (int i=1; i <= Minen; i++) 	
		{
			x = (int) (Math.random() * Zeilen);
			y = (int) (Math.random() * Spalten);
			
			if (FeldArray[x][y].Zahl == 9)
			{
				i--;
			}	
			else
			{
				FeldArray = SetzeMine(FeldArray, x, y);
			}	
		}
		
		for(int z=0;z<Zeilen;z++)
		{
		for (int s=0;s<Spalten;s++)
		{
			FeldArray[z][s].addMouseListener(new MeinMouseListener(FeldArray,z,s,FeldArray[z][s].Zahl,Zeilen,Spalten,Status));
		}
		}	
	}
	
		

		
		public void Aufdecken(int Zeile, int Spalte, int zahl)
	{		
		if (FeldArray[Zeile][Spalte].Aufgedeckt != 1)
		{
			if (FeldArray[Zeile][Spalte].Markiert != 1)
			{
				if (zahl == 0)
					Leer(FeldArray, Zeile, Spalte, Zeilen, Spalten);	
				if (zahl > 0 && zahl < 9)
					{Aussehen.Zahl(FeldArray, Zeile, Spalte, zahl);
					FeldArray[Zeile][Spalte].Aufgedeckt = 1;}
				if (zahl == 9)
					{Aussehen.Mine(FeldArray, Zeile, Spalte);
					FeldArray[Zeile][Spalte].Aufgedeckt = 1;}
			}
		}
	}
	
}
 

Soulfly

Bekanntes Mitglied
Warum machst du dir das so komliziert?

Du übergibst jedem MouseListener das gesamte Feldarray.
Gibt diesem doch einfach nur das Feld das dieser benutzt(keine Angst, das funktioniert).
Damit wird die verwaltung schon mal um einiges leichter.

Die Wurzel des Problems kann darin stecken aber ich würde es erstmal umschreiben.
 

Visio

Mitglied
Lool, keine Angst, das hätte ich als nächstes gemacht.

Wollte erst mal dieses Problem lösen.
Werde aber morgen das Programm umschreiben und
wenn das Problem noch besteht den neuen Quellcode
ins Forum setzen.
 

Visio

Mitglied
Also, war neugierig, ob es dann funktioniert, aber leider
gings nach der Verbesserung auch nicht.

Hier was in der Hilfe steht:

Compilerfehler J0098
Zugriffsversuch auf nicht vorhandenes Element von "Bezeichner"

Der Compiler hat das angegebene Array-Element gefunden, es konnte jedoch nicht identifiziert werden. Dieser Fehler tritt meist dann auf, wenn bei dem Versuch, eine length-Methode eines Array zu referenzieren, ein Schreibfehler vorliegt. Dieser Fehler kann auch auftreten, wenn der Versuch unternommen wird, eine Methode in einem Array aus Objekten aufzurufen, der Aufruf jedoch keines der Elemente des Array referenziert.

Das folgende Beispiel veranschaulicht diesen Fehler:
Code:
public class Simple {
   
   public void method1() {
      String j[] = new String[10];
      // Initialisierung der Array-Elemente hier einfügen 
      String str = j.toUpperCase();
      // Fehler: Array-Klammern '[]' fehlen
   }
}

Vielleicht kann einer von euch was damit anfangen :?
 

Soulfly

Bekanntes Mitglied
Entschuldige, ich bin ziemlich blond. Hätte mir schon von Anfang an auffallen müssen.
:autsch:

Dein Problem liegt einfach daran, dass du keinen index auf das Array zeigen lässt

FeldArray2.Aufdecken(Zeile, Spalte, zahl);

so sollte das aussehen

FeldArray2[Zeile][Spalte].Aufdecken(..bla..);

Du hast da einen ziemlich fetten Denkfehler gemacht.
Du musst die MouseListener und Feld Kommunikation nochmal überdenken.
Du muss jetzt dein Programm noch ein wenig weiter ummodeln, damit du nicht irgendwas doppelt gemoppelt machst.
 

Visio

Mitglied
Tjo, das dachte ich mir auch schon :)

Das war aber nicht das Problem. Anstatt dem
FeldArray hätte ich die Klasse spielfeld mitsenden
müssen, da die Funktion ja eine Funktion
der Klasse spielfeld und nicht vom FeldArray ist :D

Jedenfalls funktionierts etz. Muss natürlich das Programm
n bisschen verschönern, aber das kann ja nicht mehr das Problem
sein.

Danke für eure Hilfe !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Zeiterfassungsprogramm Fehler Spiele- und Multimedia-Programmierung 7
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
M Fehler bei MinecraftPlugin Spiele- und Multimedia-Programmierung 3
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
coolian glsl shader syntax fehler bei if? Spiele- und Multimedia-Programmierung 8
KeexZDeveoper Fehler von OpenGL Spiele- und Multimedia-Programmierung 1
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
D Fehler bei GUI-Aktualisierung Spiele- und Multimedia-Programmierung 9
R Fehler beim Laden eines 2D-Bildes Spiele- und Multimedia-Programmierung 3
2 jMonkey fehler Spiele- und Multimedia-Programmierung 0
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
A Minecraft Plugin Teleport Fehler Spiele- und Multimedia-Programmierung 1
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
G Sound-Sampling: Sinuston; kein Fehler, aber auch kein Ton :-( Spiele- und Multimedia-Programmierung 3
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
CookieSoft Slick Texture laden Fehler Spiele- und Multimedia-Programmierung 6
A Netbeans / Gamegrid Fehler/Maze Spiele- und Multimedia-Programmierung 2
1 Fehler bei Krümel&Monster Spiele- und Multimedia-Programmierung 16
0 Finde den Fehler nicht Spiele- und Multimedia-Programmierung 2
C Java Fehler (If?) Spiele- und Multimedia-Programmierung 14
F fehler Spiele- und Multimedia-Programmierung 2
L Abfrage-Fehler? - Hilfe bei Tetris Spiele- und Multimedia-Programmierung 9
N bei abspielen der wav datei fehler Spiele- und Multimedia-Programmierung 6
D Java 2d translation() fehler Spiele- und Multimedia-Programmierung 4
D Fehler beim Stein Scher papier Spiel Spiele- und Multimedia-Programmierung 3
G Schüsse zeichnen, Fehler? Spiele- und Multimedia-Programmierung 3
R BufferStragety Fehler: Component must have a valid peer Spiele- und Multimedia-Programmierung 5
S drawImage Fehler ! Spiele- und Multimedia-Programmierung 3
I Fehler bei Änderung der Bildschirmauflösung Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben