Hallo!
Ich bin Anfänger und mein erstes Projekt, wie bei zigtausend anderen Java Anfängern ist Tetris.
Ich komme aus dem php Umfeld und kann eigentlich schon recht gut programmieren. Klassen, Inputverwaltung und Gameloop stehen schon soweit, allerdings bin ich bei einem Problem gelandet, welches mir sehr spanisch erscheint und was mich momentan am Fortfahren hintert.
Hier erstmal ein Auszug aus dem Quelltext:
[Java]
public class gameinterface {
/**
* @param args
*/
static fieldset xfieldset;
static JFrame f;
static boolean resetround;
static boolean appterm;
public static void main(String[] args)
{
// var
int i, j, n;
gameloop gl;
background b;
appterm = false;
resetround = false;
n = 0;
b = new background();
System.out.print("Entering Game loop...\n");
while (!appterm)
{
// create fieldset and JFrame
if (xfieldset == null || resetround == true)
{
System.out.print("xfieldset is " + xfieldset + ", f is " + f + " resetround is " + resetround + ", creating new objects...\n");
xfieldset = null;
f = null;
createfieldset( b );
final Timer timer = new Timer();
gl = new gameloop(timer);
timer.scheduleAtFixedRate(gl, 0, 1000);
}
else
{
redrawFromFieldset( b );
}
resetround = false;
//xfieldset.testcreatepawn(5, 5);
if (n++ > 10) appterm = true; // <= nur testweise schleifenbegrenzung, damit programm nicht "amok" läuft
}
System.out.print("Game loop terminated...\n");
}
private static void createfieldset( background b )
{
// Create and initialize fieldset
xfieldset = new fieldset();
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 500, 800 );
f.add( b );
f.setVisible( true );
f.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt)
{
// eventhandling
//System.out.print("Found Key event: " + evt + "\n");
switch( evt.getKeyChar() )
{
case 'q':
case 'Q':
xfieldset.causeTurnCCW();
break;
case 'w':
case 'W':
xfieldset.causeTurnCW();
break;
case 'a':
case 'A':
xfieldset.causeLeft();
break;
case 's':
case 'S':
xfieldset.causeDown();
break;
case 'd':
case 'D':
xfieldset.causeRight();
break;
}
}
});
}
private static void redrawFromFieldset( background b )
{
//System.out.print("redrawing fieldset...\n");
//System.out.print("fieldset is " + f + "\n");
if (f == null) System.out.print("JFrame is empty!\n");
//f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 500, 800 );
f.add( b );
f.setVisible( true );
f.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt)
{
// eventhandling
//System.out.print("Found Key event: " + evt + "\n");
switch( evt.getKeyChar() )
{
case 'q':
case 'Q':
xfieldset.causeTurnCCW();
break;
case 'w':
case 'W':
xfieldset.causeTurnCW();
break;
case 'a':
case 'A':
xfieldset.causeLeft();
break;
case 's':
case 'S':
xfieldset.causeDown();
break;
case 'd':
case 'D':
xfieldset.causeRight();
break;
}
}
});
}
[/Java]
Das Problem befindet sich in Zeile 103.
Denn ab Zeile 40 nach der Klammer der If-Abfrage ist f nämlich nicht mehr vorhanden. ???:L
Selbst in Zeile 46 gibt mir eine Abfrage nach f aus, dass f null ist! Obwohl f ein paar Zeilen weiter vorher erst erstellt wurde und zwischen Z. 40 und 41 noch ein Objekt war
Aber das kann nicht sein!
f ist im globalen scope. Keine Methode überschreibt f hier! Selbst beim nächsten Durchlauf der while-Schleife im main() müsste f immernoch vorhanden sein, ist es aber nicht.
Wo ist hier der Fehler? Ich kapier das nicht >_<
Wäre sehr dankbar für hilfe
Ich bin Anfänger und mein erstes Projekt, wie bei zigtausend anderen Java Anfängern ist Tetris.
Ich komme aus dem php Umfeld und kann eigentlich schon recht gut programmieren. Klassen, Inputverwaltung und Gameloop stehen schon soweit, allerdings bin ich bei einem Problem gelandet, welches mir sehr spanisch erscheint und was mich momentan am Fortfahren hintert.
Hier erstmal ein Auszug aus dem Quelltext:
[Java]
public class gameinterface {
/**
* @param args
*/
static fieldset xfieldset;
static JFrame f;
static boolean resetround;
static boolean appterm;
public static void main(String[] args)
{
// var
int i, j, n;
gameloop gl;
background b;
appterm = false;
resetround = false;
n = 0;
b = new background();
System.out.print("Entering Game loop...\n");
while (!appterm)
{
// create fieldset and JFrame
if (xfieldset == null || resetround == true)
{
System.out.print("xfieldset is " + xfieldset + ", f is " + f + " resetround is " + resetround + ", creating new objects...\n");
xfieldset = null;
f = null;
createfieldset( b );
final Timer timer = new Timer();
gl = new gameloop(timer);
timer.scheduleAtFixedRate(gl, 0, 1000);
}
else
{
redrawFromFieldset( b );
}
resetround = false;
//xfieldset.testcreatepawn(5, 5);
if (n++ > 10) appterm = true; // <= nur testweise schleifenbegrenzung, damit programm nicht "amok" läuft
}
System.out.print("Game loop terminated...\n");
}
private static void createfieldset( background b )
{
// Create and initialize fieldset
xfieldset = new fieldset();
JFrame f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 500, 800 );
f.add( b );
f.setVisible( true );
f.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt)
{
// eventhandling
//System.out.print("Found Key event: " + evt + "\n");
switch( evt.getKeyChar() )
{
case 'q':
case 'Q':
xfieldset.causeTurnCCW();
break;
case 'w':
case 'W':
xfieldset.causeTurnCW();
break;
case 'a':
case 'A':
xfieldset.causeLeft();
break;
case 's':
case 'S':
xfieldset.causeDown();
break;
case 'd':
case 'D':
xfieldset.causeRight();
break;
}
}
});
}
private static void redrawFromFieldset( background b )
{
//System.out.print("redrawing fieldset...\n");
//System.out.print("fieldset is " + f + "\n");
if (f == null) System.out.print("JFrame is empty!\n");
//f = new JFrame();
f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 500, 800 );
f.add( b );
f.setVisible( true );
f.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt)
{
// eventhandling
//System.out.print("Found Key event: " + evt + "\n");
switch( evt.getKeyChar() )
{
case 'q':
case 'Q':
xfieldset.causeTurnCCW();
break;
case 'w':
case 'W':
xfieldset.causeTurnCW();
break;
case 'a':
case 'A':
xfieldset.causeLeft();
break;
case 's':
case 'S':
xfieldset.causeDown();
break;
case 'd':
case 'D':
xfieldset.causeRight();
break;
}
}
});
}
[/Java]
Das Problem befindet sich in Zeile 103.
Denn ab Zeile 40 nach der Klammer der If-Abfrage ist f nämlich nicht mehr vorhanden. ???:L
Selbst in Zeile 46 gibt mir eine Abfrage nach f aus, dass f null ist! Obwohl f ein paar Zeilen weiter vorher erst erstellt wurde und zwischen Z. 40 und 41 noch ein Objekt war
Aber das kann nicht sein!
f ist im globalen scope. Keine Methode überschreibt f hier! Selbst beim nächsten Durchlauf der while-Schleife im main() müsste f immernoch vorhanden sein, ist es aber nicht.
Wo ist hier der Fehler? Ich kapier das nicht >_<
Wäre sehr dankbar für hilfe