# A Java Exception Has Occured



## expensne (13. Sep 2014)

Heyho,

habe ein kleines Senso-Spiel programmiert. Bei mir auf dem Pc und auf meinem Laptop (auf beiden JDK 8u20 & NetBeans 8.0.1) läuft die Jar auch, wenn ich es allerdings auf anderen Pc's versuche, kommt folgende Fehlermeldung: "A Java Exception Has Occured". 

Jemand eine Idee wodran es liegt?

Hier mal der Code, falls das weiterhilft:

```
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import static java.lang.Thread.sleep;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class Farbfeld extends JFrame implements Runnable {

    int frameHoehe;
    int frameBreite;
    Integer anzahl;
    int geschwindigkeitMS;
    int anzahlKlicks;
    Integer score;

    boolean rundeLaeuft;
    boolean gewonnen;

    GridLayout layout;

    JLabel scoreLabel, statusLabel;

    JPanel rotPanel, blauPanel, gelbPanel, gruenPanel;

    JButton startButton;

    Thread runde;

    ArrayList computerFelder, spielerFelder;

    public Farbfeld(int hoehe, int breite) {
        this.frameHoehe = hoehe;
        this.frameBreite = breite;

        rundeLaeuft = false;
        anzahl = 1;
        geschwindigkeitMS = 400;
        score = 0;

        spielfelderIni(100, 100);
        startButtonIni();
        mausListenerStarten();
        frameIni();
    }

    private void feldFarbeAendern(JPanel feld) {
        if (feld.equals(rotPanel)) {
            feld.setBackground(new Color(160, 0, 0));
        }

        if (feld.equals(gelbPanel)) {
            feld.setBackground(new Color(160, 160, 0));
        }

        if (feld.equals(gruenPanel)) {
            feld.setBackground(new Color(0, 160, 0));
        }

        if (feld.equals(blauPanel)) {
            feld.setBackground(new Color(000, 000, 160));
        }
    }

    private JPanel zufallsFeld() {
        int zahl = (int) (Math.random() * 4);

        if (zahl == 0) {
            return rotPanel;
        }
        if (zahl == 1) {
            return blauPanel;
        }
        if (zahl == 2) {
            return gruenPanel;
        }
        if (zahl == 3) {
            return gelbPanel;
        } else {
            System.out.println("Fehler: zahl zw 0-3");
            return null;
        }
    }

    private void zuComputerListeAddieren(JPanel feld) {
        if (feld.equals(rotPanel)) {
            computerFelder.add("rot");
        }
        if (feld.equals(gelbPanel)) {
            computerFelder.add("gelb");
        }
        if (feld.equals(gruenPanel)) {
            computerFelder.add("gruen");
        }
        if (feld.equals(blauPanel)) {
            computerFelder.add("blau");
        }
    }

    private void rundeSpielen() {
        rundeLaeuft = true;

        statusLabel.setText("merken");

        computerFelder = new ArrayList();

        for (int i = 0; i < anzahl; i++) {
            JPanel zufallsFeld = zufallsFeld();
            zuComputerListeAddieren(zufallsFeld);
            Color feldFarbeBackup = zufallsFeld.getBackground();
            feldFarbeAendern(zufallsFeld);
            try {
                sleep(geschwindigkeitMS);
            } catch (InterruptedException ex) {
            }
            zufallsFeld.setBackground(feldFarbeBackup);
            try {
                sleep(geschwindigkeitMS);
            } catch (InterruptedException ex) {
            }
        }

        anzahlKlicks = 0;
        spielerFelder = new ArrayList();
        statusLabel.setText("spielen");
    }

    private void mausListenerStarten() {

        rotPanel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent me) {

            }

            @Override
            public void mousePressed(MouseEvent me) {
                if (rundeLaeuft) {
                    anzahlKlicks++;
                    spielerFelder.add("rot");
                    rotPanel.setBackground(new Color(200, 0, 0));
                }
            }

            @Override
            public void mouseReleased(MouseEvent me) {
                if (rundeLaeuft) {
                    rotPanel.setBackground(new Color(255, 0, 0));
                }
            }

            @Override
            public void mouseEntered(MouseEvent me) {
            }

            @Override
            public void mouseExited(MouseEvent me) {
            }
        });

        blauPanel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent me) {

            }

            @Override
            public void mousePressed(MouseEvent me) {
                if (rundeLaeuft) {
                    anzahlKlicks++;
                    spielerFelder.add("blau");
                    blauPanel.setBackground(new Color(0, 0, 200));
                }
            }

            @Override
            public void mouseReleased(MouseEvent me) {
                if (rundeLaeuft) {
                    blauPanel.setBackground(new Color(0, 0, 255));
                }
            }

            @Override
            public void mouseEntered(MouseEvent me) {

            }

            @Override
            public void mouseExited(MouseEvent me) {

            }
        });

        gelbPanel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent me) {

            }

            @Override
            public void mousePressed(MouseEvent me) {
                if (rundeLaeuft) {
                    anzahlKlicks++;
                    spielerFelder.add("gelb");
                    gelbPanel.setBackground(new Color(200, 200, 0));
                }
            }

            @Override
            public void mouseReleased(MouseEvent me) {
                if (rundeLaeuft) {
                    gelbPanel.setBackground(new Color(255, 255, 0));
                }
            }

            @Override
            public void mouseEntered(MouseEvent me) {

            }

            @Override
            public void mouseExited(MouseEvent me) {

            }
        });

        gruenPanel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent me) {

            }

            @Override
            public void mousePressed(MouseEvent me) {
                if (rundeLaeuft) {
                    anzahlKlicks++;
                    spielerFelder.add("gruen");
                    gruenPanel.setBackground(new Color(0, 200, 0));
                }
            }

            @Override
            public void mouseReleased(MouseEvent me) {
                if (rundeLaeuft) {
                    gruenPanel.setBackground(new Color(0, 255, 0));
                }
            }

            @Override
            public void mouseEntered(MouseEvent me) {

            }

            @Override
            public void mouseExited(MouseEvent me) {

            }
        });
    }

    private void updateGame() {
        if (anzahlKlicks == anzahl) {
            ergebnisCheck();
            rundeLaeuft = false;
            rotPanel.setBackground(Color.red);
            blauPanel.setBackground(Color.blue);
            gelbPanel.setBackground(Color.yellow);
            gruenPanel.setBackground(Color.green);
        }
    }

    private void schwierigkeitSteigern() {
        anzahl += 1;
        if (geschwindigkeitMS > 180) {
            geschwindigkeitMS -= 10;
        }
    }

    private void schwierigkeitReset() {
        anzahl = 1;
        geschwindigkeitMS = 400;
    }

    private void ergebnisCheck() {
        gewonnen = true;

        for (int i = 0; i < anzahl; i++) {
            if (!computerFelder.get(i).equals(spielerFelder.get(i))) {
                gewonnen = false;
                break;
            }
        }

        if (gewonnen) {
            score += anzahl;
            scoreLabel.setText(score.toString());
            schwierigkeitSteigern();
            statusLabel.setText("Runde " + anzahl);
        } else {
            score = 0;
            scoreLabel.setText(score.toString());
            schwierigkeitReset();
            statusLabel.setText("Runde " + anzahl);
        }
    }

    private void threadStarten() {
        runde = new Thread(this);
        runde.start();
    }

    private void startButtonIni() {
        startButton = new JButton("Start");
        startButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if (!rundeLaeuft) {
                    threadStarten();
                }
            }
        });
    }

    private void spielfelderIni(int hoehe, int breite) {
        rotPanel = new JPanel();
        gelbPanel = new JPanel();
        blauPanel = new JPanel();
        gruenPanel = new JPanel();

        rotPanel.setPreferredSize(new Dimension(hoehe, breite));
        gelbPanel.setPreferredSize(new Dimension(hoehe, breite));
        blauPanel.setPreferredSize(new Dimension(hoehe, breite));
        gruenPanel.setPreferredSize(new Dimension(hoehe, breite));

        rotPanel.setBackground(Color.red);
        gruenPanel.setBackground(Color.green);
        blauPanel.setBackground(Color.blue);
        gelbPanel.setBackground(Color.yellow);
    }

    private void frameIni() {
        this.setTitle("Farbfeld");
        this.setLocation(400, 200);
        this.setSize(new Dimension(frameHoehe, frameBreite));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        layout = new GridLayout(4, 1);
        layout.setHgap(10);
        layout.setVgap(10);
        this.setLayout(layout);

        scoreLabel = new JLabel(score.toString());
        statusLabel = new JLabel("Runde " + anzahl);

        statusLabel.setFont(scoreLabel.getFont().deriveFont(25f));
        statusLabel.setForeground(Color.GRAY);

        scoreLabel.setFont(scoreLabel.getFont().deriveFont(60f));
        scoreLabel.setForeground(Color.GRAY);

        add(scoreLabel);
        add(statusLabel);

        add(rotPanel);
        add(gruenPanel);
        add(gelbPanel);
        add(blauPanel);

        add(startButton);

        this.setResizable(false);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(
                    javax.swing.UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }
        new Farbfeld(280, 400);
    }

    @Override
    public void run() {
        rundeSpielen();

        while (rundeLaeuft) {
            updateGame();
            try {
                sleep(100);
            } catch (InterruptedException ex) {
            }
        }
    }
}
```


Mfg Fabian


----------



## turtle (13. Sep 2014)

Bitte mal die ganze Exception posten.

Ich vermute du startest dein Programm per Doppelklick, denn dann erfolgt keine Ausgabe. Daher das Programm von der Kommandozeile starten, wahrscheinlich java -jar Deine.jar


----------



## expensne (13. Sep 2014)

Anhang anzeigen 6831

So eine. Ja wieso funktioniert das denn nicht mit Doppelklick? Was für eine Ausgabe soll denn erzeugt werden, ist doch ein JFrame?
Bei einem anderen Programm das ich gemacht habe klappt das aber ganz normal mit Doppelklick.

Über die CMD passiert das selbe. :bahnhof:

Hier mal die Jar:
Anhang anzeigen Farbfeld.jar


----------



## turtle (13. Sep 2014)

Anhang lässt sich nicht öffnen, ich rate einfach die Exception hier zu posten.

Egal, wie dein Programm aufgebaut ist, kann es ja passieren, das beim Start eine schwerwiegende Sache schief geht. Dann startet das  Programm ja gar nicht erst, sondern schmiert (hoffentlich) mit einer aussagekräftigen Exception ab.

Unter Windows werden JAR's mit javaw gestartet und so bekommst du solche Meldungen gar nicht erst zu sehen.

In deinem Fall habe ich sogar eine Vermutung Auf anderen Rechnern ist halt nicht Java 8 installiert sondern eine frühere Version. Damit kommt (natürlich) eine frühere JVM nicht klar.


----------



## expensne (14. Sep 2014)

turtle hat gesagt.:


> Anhang lässt sich nicht öffnen, ich rate einfach die Exception hier zu posten.
> 
> Egal, wie dein Programm aufgebaut ist, kann es ja passieren, das beim Start eine schwerwiegende Sache schief geht. Dann startet das  Programm ja gar nicht erst, sondern schmiert (hoffentlich) mit einer aussagekräftigen Exception ab.
> 
> ...



Jap, funktioniert, war dann wohl wegen Java8. 
Das war übrigens die Fehlermeldung:


----------

