Hallo zusammen!
Wir müssen in der Schule eine einfache Animation programmieren.
Nun habe ich im Internet nach Beispielen gesucht und diese ausprobiert. Funktioniert tiptop.
Diese sind allerdings als Applet programmiert.
Ich möchte nun aber ein Progrämmchen, welches auf JFrame basiert. Dort möchte ich eine Grafikfläche (Canvas) drüberlegen und die Animation dort drin ablaufen lassen.
Allerdings erhalte ich schon beim Anzeigen von einem Rechteck einen Fehler.
Irgendwie hab ich den Durchblick nicht mehr. Kann mir jemand sagen, ob ich irgendwie einen Denkfehler gemacht habe oder wieso dass der Code so nicht funktioniert?
Hier mein Code (noch nicht vollständig):
Main.java
Fenster.java
Grafikfläche.java
Animation
Besten Dank für eure Hilfe!
Gruss mf4nky
Wir müssen in der Schule eine einfache Animation programmieren.
Nun habe ich im Internet nach Beispielen gesucht und diese ausprobiert. Funktioniert tiptop.
Diese sind allerdings als Applet programmiert.
Ich möchte nun aber ein Progrämmchen, welches auf JFrame basiert. Dort möchte ich eine Grafikfläche (Canvas) drüberlegen und die Animation dort drin ablaufen lassen.
Allerdings erhalte ich schon beim Anzeigen von einem Rechteck einen Fehler.
Code:
Exception in thread "Thread-2" java.lang.NullPointerException
at steuerung_automat.Animation.anzeigen(Animation.java:35)
at steuerung_automat.Animation.run(Animation.java:18)
Irgendwie hab ich den Durchblick nicht mehr. Kann mir jemand sagen, ob ich irgendwie einen Denkfehler gemacht habe oder wieso dass der Code so nicht funktioniert?
Hier mein Code (noch nicht vollständig):
Main.java
Code:
package steuerung_automat;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
Fenster app = new Fenster();
app.setVisible(true);
}
}
Fenster.java
Code:
package steuerung_automat;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class Fenster extends JFrame {
Grafikfläche gfkFläche = null;
Animation ani = null;
Fenster() {
super("Steuerungsautomat");
setSize(500, 400);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
add(getGfkFläche());
getAni();
getAni().start();
}
public Grafikfläche getGfkFläche() {
if (gfkFläche == null) {
gfkFläche = new Grafikfläche();
}
return gfkFläche;
}
public Animation getAni() {
if (ani == null) {
ani = new Animation(getGfkFläche(), 0, 20);
}
return ani;
}
}
Grafikfläche.java
Code:
package steuerung_automat;
import java.awt.Canvas;
import java.awt.Color;
public class Grafikfläche extends Canvas {
Grafikfläche() {
setBackground(Color.BLACK);
}
}
Animation
Code:
package steuerung_automat;
import java.awt.*;
public class Animation extends Thread {
Grafikfläche gfkFläche;
int x = 0;
int y = 0;
Animation(Grafikfläche gfkFläche, int x, int y) {
this.gfkFläche = gfkFläche;
this.x = x;
this.y = y;
}
public void run() {
anzeigen();
while(this.isInterrupted() == false) {
// Hier kommt später dann noch der Methodenaufruf "bewegen()" hin.
// Diese Methode soll das Rechteck über den Bildschirm bewegen.
try {
sleep(1000);
} catch (InterruptedException e) {
}
}
}
public void anzeigen() {
Graphics g = gfkFläche.getGraphics();
g.setColor(Color.RED);
g.fillRect(x, y, 40, 25);
}
public void bewegen() {}
}
Besten Dank für eure Hilfe!
Gruss mf4nky