Hallo Leute
Ich bin ein absoluter Anfänger und muss ein Projekt für die Schule erledigen. Dabei möchte ich zwei Roboter durchs Bild wandern lassen können. Das hab ich bereits alles geschafft jedoch kommt nun der Punkt wo eine Kollisionsvermeidung über ein Array eingearbeitet werden soll. Wie ich das anlege verstehe jedoch muss ich den Wert in eine andere Klasse übergeben was mir das Problem bereitet. Es wird folgender Fehler angezeigt:java.lang.ExceptionInInitializerError
Hier nun der Quellcode der Klasse Roboter
und nun der der Klasse Terretorium
der Fehler ist wahrscheinlich in der Übergabe in die andere Klasse in der ich den Wert verarbeiten möchte aber ich habe keine Ahnugn wie ich das lösen könnte.
Mit freundlichen Grüßen
Ich bin ein absoluter Anfänger und muss ein Projekt für die Schule erledigen. Dabei möchte ich zwei Roboter durchs Bild wandern lassen können. Das hab ich bereits alles geschafft jedoch kommt nun der Punkt wo eine Kollisionsvermeidung über ein Array eingearbeitet werden soll. Wie ich das anlege verstehe jedoch muss ich den Wert in eine andere Klasse übergeben was mir das Problem bereitet. Es wird folgender Fehler angezeigt:java.lang.ExceptionInInitializerError
Hier nun der Quellcode der Klasse Roboter
Java:
package roboter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class Roboter {
int xPos, yPos; // Variablendeklaration von xPos und yPos
int richtung = 1; // Variablendeklaration von richtung mit dem Wert 1
int schrittweite = 50; // Variablendeklaration von Schrittweite mit dem Wert 50
int kleiner; // Variablendeklaration von kleiner
int verschiebung; // Variablendeklaration von verschiebung
int limit = 4; // Variablendeklaration von limit mit dem Wert 4
int arrayx [] = new int [2]; // neues Array anlegen mit dem Namen arrayx
public Roboter(int x, int y) // Methodenaufruf von Roboter mit den Übergabewerten x und y
{
xPos = x;
yPos = y; // Variablenzuweisung
}
public void schrittgross() // Methodenaufruf von schrittgross
{
schrittweite += 10; // Variable schrittweite um 10 erhöhen
}
public void schrittklein() // Methodenaufruf von schrittklein
{
schrittweite -= 10; // Variable schrittweite um 10 verringern
}
public void vor1(Dimension TerritoriumSize) // Methodenaufruf von vor
{
if (arrayx [0]+ schrittweite < arrayx[1]){
if (xPos + schrittweite < TerritoriumSize.getWidth() && richtung == 2)
{
xPos += schrittweite;
} else if (xPos - 26 - schrittweite >= 0 && richtung == 4) {
xPos -= schrittweite;
}
}
}
public void zurueck1(Dimension TerritoriumSize) // Methodenaufruf von zurueck
{
if ((arrayx [0]+ schrittweite)< arrayx[1]){
if (xPos + schrittweite < TerritoriumSize.getWidth() && richtung == 4)
{
xPos += schrittweite;
} else if (xPos - 26 - schrittweite >= 0 && richtung == 2) {
xPos -= schrittweite;
}
}
}
public void vor2(Dimension TerritoriumSize) // Methodenaufruf von vor
{
if ((arrayx [1]- schrittweite)< arrayx[0]){
if (xPos + schrittweite < TerritoriumSize.getWidth() && richtung == 2)
{
xPos += schrittweite;
} else if (xPos - 26 - schrittweite >= 0 && richtung == 4) {
xPos -= schrittweite;
}
}
}
public void zurueck2(Dimension TerritoriumSize) // Methodenaufruf von zurueck
{
if ((arrayx [1]- schrittweite)< arrayx[0]){
if (xPos + 26 + schrittweite < TerritoriumSize.getWidth() && richtung == 4)
{
xPos += schrittweite;
} else if (xPos - 26 - schrittweite >= 0 && richtung == 2) {
xPos -= schrittweite;
}
}
}
public void linksUm() // Methodenaufruf von linksUm
{
if (richtung < 4) {
richtung++; // Abfrage ob richtung kleiner 4 ist wenn ja richtung + 1
} else {
richtung = 1; // sonst richtung auf 1 setzen
}
}
public void rechtsUm() // Methodenaufruf von rechtsUm
{
if (richtung > 1) {
richtung--; // Abfrage ob richtung größer 1 ist wenn ja richtung - 1
} else {
richtung = 4; // sonst richtung auf 4 setzen
}
}
public void komme() // Methodenaufruf von komme
{
if (limit < 8) { // Prüfung ob Roboter nicht schon zu nahe
limit ++; // Variable eins hochzählen
kleiner += 1; // die Variable mit 2 addieren
verschiebung += 4; // die Variable verschiebung mit 8 addieren
}
}
public void gehe() // Methodenaufruf von gehe
{
if (limit > 1) { // Prüfung ob Roboter nicht zu weit weg ist
limit --; // Variable eins herunterzählen
kleiner -= 1; // die Variable kleiner mit 1 subtrahieren
verschiebung -= 4; // die Variable verschiebung mit 4 subtrahieren
}
}
public void zeigen(Graphics g) // Methodenaufruf von zeigen mit Zeichenparameterübergabe
{
if (richtung == 1) {
zeigenVorn(g); // Abfrage ob richtung gleich 1 ist wenn ja Methode zeigenVorn aufrufen
} else if (richtung == 2) {
zeigenRechts(g); // sonst Abfrage ob richtung gleich 2 ist wenn ja Methode zeigenRechts aufrufen
} else if (richtung == 3) {
zeigenHinten(g); // sonst Abfrage ob richtung gleich 3 ist wenn ja Methode zeigenHinten aufrufen
} else {
zeigenLinks(g); // sonst Methode zeigenlinks aufrufen
}
}
public void zeigenVorn(Graphics g) // Methodenaufruf von zeigenVorn mit Zeichenparameterübergabe
{
g.setColor(new Color(255, 255, 255)); // Farbe auf weiß setzen
g.fillRect(xPos - 50 + verschiebung, yPos - 45 + verschiebung, 110 + kleiner, 260 + kleiner); // weißer Kasten zum übermalen
g.setColor(new Color(0, 0, 0)); // Farbe auf schwarz setzen
g.drawOval(xPos - 25 + verschiebung, yPos - 30 + verschiebung - kleiner, 50 + kleiner, 50 + kleiner); // Kopf
g.drawOval(xPos - 12 + verschiebung, yPos - 14 + verschiebung - kleiner, 5 + kleiner, 3 + kleiner); // Auge links
g.drawOval(xPos + 10 + verschiebung, yPos - 14 + verschiebung - kleiner, 5 + kleiner, 3 + kleiner); // Auge rechts
g.drawOval(xPos - 10 + verschiebung, yPos + 3 + verschiebung - kleiner, 20 + kleiner, 5 + kleiner); // Mund
g.drawRect(xPos - 30 + verschiebung, yPos + 20 + verschiebung, 60 + kleiner, 100 + kleiner); // Bauch
g.drawRect(xPos - 40 + verschiebung - kleiner, yPos + 25 + verschiebung, 10 + kleiner, 70 + kleiner); // Arm links
g.drawRect(xPos + 30 + verschiebung + kleiner, yPos + 25 + verschiebung, 10 + kleiner, 70 + kleiner); // Arm rechts
g.drawRect(xPos + 10 + verschiebung, yPos + 120 + verschiebung + kleiner, 15 + kleiner, 80 + kleiner); // Bein rechts
g.drawRect(xPos - 22 + verschiebung, yPos + 120 + verschiebung + kleiner, 15 + kleiner, 80 + kleiner); // Bein links
g.drawRect(xPos + 10 + verschiebung, yPos + 185 + verschiebung + kleiner, 15 + kleiner, 15 + kleiner); // Fuss rechts
g.drawRect(xPos - 22 + verschiebung, yPos + 185 + verschiebung + kleiner, 15 + kleiner, 15 + kleiner); // Fuss links
}
public void zeigenHinten(Graphics g) // Methodenaufruf von zeigenHinten mit Zeichenparameterübergabe
{
g.setColor(new Color(255, 255, 255)); // Farbe auf weiß setzen
g.fillRect(xPos - 50 + verschiebung, yPos - 45 + verschiebung, 110 + kleiner, 260 + kleiner); // weißer Kasten zum übermalen
g.setColor(new Color(0, 0, 0)); // Farbe auf Schwarz setzen
g.drawOval(xPos - 25 + verschiebung, yPos - 30 + verschiebung - kleiner, 50 + kleiner, 50 + kleiner); // Kopf
g.drawRect(xPos - 30 + verschiebung, yPos + 20 + verschiebung, 60 + kleiner, 100 + kleiner); // Bauch
g.drawRect(xPos - 40 + verschiebung - kleiner, yPos + 25 + verschiebung, 10 + kleiner, 70 + kleiner); // Arm links
g.drawRect(xPos + 30 + verschiebung + kleiner, yPos + 25 + verschiebung, 10 + kleiner, 70 + kleiner); // Arm rechts
g.drawRect(xPos + 10 + verschiebung, yPos + 120 + verschiebung + kleiner, 15 + kleiner, 80 + kleiner); // Bein rechts
g.drawRect(xPos - 22 + verschiebung, yPos + 120 + verschiebung + kleiner, 15 + kleiner, 80 + kleiner); // Bein links
g.drawOval(xPos - 12 + verschiebung, yPos + 85 + verschiebung, 25 + kleiner, 25 + kleiner); // Steckdose äußerer kreis
g.drawOval(xPos - 7 + verschiebung, yPos + 95 + verschiebung, 5 + kleiner, 5 + kleiner); // Steckdose Pin links
g.drawOval(xPos + 4 + verschiebung, yPos + 95 + verschiebung, 5 + kleiner, 5 + kleiner); // Steckdose Pin rechts
}
public void zeigenRechts (Graphics g) // Methodenaufruf von zeigenRechts mit Zeichenparameterübergabe
{
g.setColor (new Color(255,255,255)); // Farbe auf weiß setzen
g.fillRect(xPos-87+verschiebung,yPos-50+verschiebung,165,260); // weißer Kasten zum übermalen
g.setColor (new Color(0,0,0)); // Farbe auf Schwarz setzen
g.drawRect(xPos-14+verschiebung,yPos-30+verschiebung-kleiner,25+kleiner,50+kleiner); // Kopf
g.drawRect(xPos-22+verschiebung,yPos+20+verschiebung,40+kleiner,100+kleiner); // Bauch
g.drawRect(xPos-7+verschiebung,yPos+25+verschiebung,12+kleiner,70+kleiner); // Arm
g.drawRect(xPos-11+verschiebung,yPos+120+verschiebung+kleiner,17+kleiner,80+kleiner); // Bein
g.drawRect(xPos+6+verschiebung+kleiner,yPos+185+verschiebung+kleiner,18+kleiner,15+kleiner); // Fuss
}
public void zeigenLinks (Graphics g) // Methodenaufruf von zeigenLinks mit Zeichenparameterübergabe
{
g.setColor (new Color(255,255,255)); // Farbe auf weiß setzen
g.fillRect(xPos-87+verschiebung,yPos-50+verschiebung,165+kleiner,260+kleiner); // weißer Kasten zum übermalen
g.setColor (new Color(0,0,0)); // Farbe auf Schwarz setzen
g.drawRect(xPos-14+verschiebung,yPos-30+verschiebung-kleiner,25+kleiner,50+kleiner); // Kopf
g.drawRect(xPos-22+verschiebung,yPos+20+verschiebung,40+kleiner,100+kleiner); // Bauch
g.drawRect(xPos-7+verschiebung,yPos+25+verschiebung,12+kleiner,70+kleiner); // Arm
g.drawRect(xPos-11+verschiebung,yPos+120+verschiebung+kleiner,17+kleiner,80+kleiner); // Bein
g.drawRect(xPos-29+verschiebung-kleiner,yPos+185+verschiebung+kleiner,18+kleiner,15+kleiner); // Fuss
}
}
und nun der der Klasse Terretorium
Java:
package roboter;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
public class Territorium extends JApplet implements ActionListener {
Roboter robbi1, robbi2;
Button btnLinks1;
Button btnRechts1;
Button btnVor1;
Button btnZurueck1;
Button btnswp1;
Button btnswm1;
Button btnKomm1;
Button btnGeh1;
Button btnLinks2;
Button btnRechts2;
Button btnVor2;
Button btnZurueck2;
Button btnswp2;
Button btnswm2;
Button btnKomm2;
Button btnGeh2;
public void init() {
resize(900, 700);
robbi1 = new Roboter(200, 100);
robbi2 = new Roboter(600, 100);
btnLinks1 = new Button("Links drehen");
getContentPane().setLayout(null);
btnLinks1.setBounds(100, 420, 100, 50);
getContentPane().add(btnLinks1);
btnLinks1.addActionListener(this);
btnRechts1 = new Button("rechts drehen");
getContentPane().setLayout(null);
btnRechts1.setBounds(200, 420, 100, 50);
getContentPane().add(btnRechts1);
btnRechts1.addActionListener(this);
btnVor1 = new Button("Vor gehen");
getContentPane().setLayout(null);
btnVor1.setBounds(150, 370, 100, 50);
getContentPane().add(btnVor1);
btnVor1.addActionListener(this);
btnZurueck1 = new Button("Zurueck gehen");
getContentPane().setLayout(null);
btnZurueck1.setBounds(150, 470, 100, 50);
getContentPane().add(btnZurueck1);
btnZurueck1.addActionListener(this);
btnswp1 = new Button("+");
getContentPane().setLayout(null);
btnswp1.setBounds(250, 470, 50, 50);
getContentPane().add(btnswp1);
btnswp1.addActionListener(this);
btnswm1 = new Button("-");
getContentPane().setLayout(null);
btnswm1.setBounds(100, 470, 50, 50);
getContentPane().add(btnswm1);
btnswm1.addActionListener(this);
btnKomm1 = new Button("Komm");
getContentPane().setLayout(null);
btnKomm1.setBounds(100, 370, 50, 50);
getContentPane().add(btnKomm1);
btnKomm1.addActionListener(this);
btnGeh1 = new Button("Geh");
getContentPane().setLayout(null);
btnGeh1.setBounds(250, 370, 50, 50);
getContentPane().add(btnGeh1);
btnGeh1.addActionListener(this);
btnLinks2 = new Button("Links drehen");
getContentPane().setLayout(null);
btnLinks2.setBounds(500, 420, 100, 50);
getContentPane().add(btnLinks2);
btnLinks2.addActionListener(this);
btnRechts2 = new Button("rechts drehen");
getContentPane().setLayout(null);
btnRechts2.setBounds(600, 420, 100, 50);
getContentPane().add(btnRechts2);
btnRechts2.addActionListener(this);
btnVor2 = new Button("Vor gehen");
getContentPane().setLayout(null);
btnVor2.setBounds(550, 370, 100, 50);
getContentPane().add(btnVor2);
btnVor2.addActionListener(this);
btnZurueck2 = new Button("Zurueck gehen");
getContentPane().setLayout(null);
btnZurueck2.setBounds(550, 470, 100, 50);
getContentPane().add(btnZurueck2);
btnZurueck2.addActionListener(this);
btnswp2 = new Button("+");
getContentPane().setLayout(null);
btnswp2.setBounds(650, 470, 50, 50);
getContentPane().add(btnswp2);
btnswp2.addActionListener(this);
btnswm2 = new Button("-");
getContentPane().setLayout(null);
btnswm2.setBounds(500, 470, 50, 50);
getContentPane().add(btnswm2);
btnswm2.addActionListener(this);
btnKomm2 = new Button("Komm");
getContentPane().setLayout(null);
btnKomm2.setBounds(500, 370, 50, 50);
getContentPane().add(btnKomm2);
btnKomm2.addActionListener(this);
btnGeh2 = new Button("Geh");
getContentPane().setLayout(null);
btnGeh2.setBounds(650, 370, 50, 50);
getContentPane().add(btnGeh2);
btnGeh2.addActionListener(this);
}
public void actionPerformed(ActionEvent event, int [] arrayx) {
if (event.getSource() == btnLinks1) {
robbi1.linksUm();
}
repaint();
if (event.getSource() == btnRechts1) {
robbi1.rechtsUm();
}
repaint();
if (event.getSource() == btnVor1) {
//robbi1.vor();
arrayx [0] = robbi1.xPos;
robbi1.vor1(this.getSize());
}
repaint();
if (event.getSource() == btnZurueck1) {
arrayx [0] = robbi1.xPos;
robbi1.zurueck1(this.getSize());
}
repaint();
if (event.getSource() == btnswp1) {
robbi1.schrittgross();
}
repaint();
if (event.getSource() == btnswm1) {
robbi1.schrittklein();
}
repaint();
if (event.getSource() == btnKomm1) {
robbi1.komme();
}
repaint();
if (event.getSource() == btnGeh1) {
robbi1.gehe();
}
repaint();
if (event.getSource() == btnLinks2) {
robbi2.linksUm();
}
repaint();
if (event.getSource() == btnRechts2) {
robbi2.rechtsUm();
}
repaint();
if (event.getSource() == btnVor2) {
//robbi2.vor();
arrayx [1] = robbi2.xPos;
robbi2.vor2( this.getSize() );
}
repaint();
if (event.getSource() == btnZurueck2) {
arrayx [1] = robbi2.xPos;
robbi2.zurueck2(this.getSize());
}
repaint();
if (event.getSource() == btnswp2) {
robbi2.schrittgross();
}
repaint();
if (event.getSource() == btnswm2) {
robbi2.schrittklein();
}
repaint();
if (event.getSource() == btnKomm2) {
robbi2.komme();
}
repaint();
if (event.getSource() == btnGeh2) {
robbi2.gehe();
}
repaint();
}
public void paint(Graphics g) {
robbi1.zeigen(g);
robbi2.zeigen(g);
}
}
der Fehler ist wahrscheinlich in der Übergabe in die andere Klasse in der ich den Wert verarbeiten möchte aber ich habe keine Ahnugn wie ich das lösen könnte.
Mit freundlichen Grüßen