Hallo, ich habe ein einfaches WM-Quiz erstellt, bei dem die Fragen mit einem Parser zerlegt werden und dann der GUI zugewiesen werden. In der Theorie schön und gut und auch beim kompilieren gibt es keine Fehlermeldung. Wenn man das Programm allerdings ausführt, kommt folgender Error und die Fragen werden nicht in die GUI geladen:
Auf der Seite ( http://wiki.infostudium.de/wiki/Fehlermeldungen_(Java) ) habe ich folgende Beschreibung zum Fehler gefunden, jedoch komme ich damit auch nicht weiter
Der Versuch auf eine Objektrefernz zu zugreifen, die den Wert null enthält. Die Referenz muss entweder mit einer anderen Referenz oder mit dem new-Operator initialisiert werden. Der Fehler kann auch im Zusammenhang mit Hüllklassen auftreten, dazu ein Beispiel:
Arrays werden in Java standardmäßig mit 0 bzw. null initialisiert. Daher kommt beim Compilieren keine Meldung vom Typ "variable *** might not have been initialized". Wird dann versucht mit dem Integer-Objekt zu arbeiten tritt die Exception auf.
Anbei poste ich jetzt noch den Java-Code. Es wäre echt toll, wenn mir einer helfen kann und mich auf den Fehler aufmerksam macht
QuizFenster.java
Fragen.java
FrageChange.java
Java:
Exception in thread "main" java.lang.NullPointerException
at FrageChange.aendereText(FrageChange.java:69)
at FrageChange.neueFrage(FrageChange.java:27)
at FrageChange.<init>(FrageChange.java:18)
at QuizFenster.main(QuizFenster.java:23)
Java:
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:5)
Java:
public class Test {
public static void main(String[] args) {
Integer[] array = new Integer[5];
int i = array[0]; // <-- hier tritt die Exception auf
System.out.println(i);
}
}
Anbei poste ich jetzt noch den Java-Code. Es wäre echt toll, wenn mir einer helfen kann und mich auf den Fehler aufmerksam macht
QuizFenster.java
Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class QuizFenster implements ActionListener {
//Bildschirmgröße messen
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
//GUI Objekte
JLabel frage;
JButton ant[] = new JButton[4];
JFrame w1;
JLabel counter;
//Variablen
int lösung, richtig;
static int erg;
//Hauptmethode
public static void main(String args[]){
new FrageChange();
}
//GUI erstelen
public QuizFenster(){
w1 = new JFrame();
w1.setSize(400,300);
//Fenster in Bildschirmmite platzieren
w1.setLocation((int) (dim.getWidth()-400)/2, (int) ((dim.getHeight()-300))/2);
w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w1.setVisible(true);
w1.setLayout(null);
ant[0] = new JButton(" ");
ant[0].setBounds(52,90,120,40);
w1.add(ant[0]);
ant[0].addActionListener(this);
ant[1] = new JButton(" ");
ant[1].setBounds(52,160,120,40);
w1.add(ant[1]);
ant[1].addActionListener(this);
ant[2] = new JButton(" ");
ant[2].setBounds(220,90,120,40);
w1.add(ant[2]);
ant[2].addActionListener(this);
ant[3] = new JButton(" ");
ant[3].setBounds(220,160,120,40);
w1.add(ant[3]);
ant[3].addActionListener(this);
frage = new JLabel("Hier steht die Frage!");
frage.setBounds(52,15,250,40);
w1.add(frage);
counter = new JLabel("Hier steht der Counter");
counter.setBounds(120,220,140,25);
w1.add(counter);
}
//Action Listener
public void actionPerformed (ActionEvent e){
if (e.getSource() == ant[0]){
if (lösung == 1) {
Nachricht("Richtig", "Weiter so!");
add();
Ende();
FrageChange.neueFrage();
} else {
Nachricht("Falsch","Nicht so.");
sub();
FrageChange.neueFrage();
} // end of if-else
} // end of if
if (e.getSource() == ant[1]){
if (lösung == 2) {
Nachricht("Richtig", "Weiter so!");
add();
Ende();
FrageChange.neueFrage();
} else {
Nachricht("Falsch","Nicht so.");
sub();
FrageChange.neueFrage();
} // end of if-else
} // end of if
if (e.getSource() == ant[2]){
if (lösung == 3) {
Nachricht("Richtig", "Weiter so!");
add();
Ende();
FrageChange.neueFrage();
} else {
Nachricht("Falsch","Nicht so.");
sub();
FrageChange.neueFrage();
} // end of if-else
} // end of if
if (e.getSource() == ant[3]){
if (lösung == 4) {
Nachricht("Richtig", "Weiter so!");
add();
Ende();
FrageChange.neueFrage();
} else {
Nachricht("Falsch","Nicht so.");
sub();
FrageChange.neueFrage();
} // end of if-else
} // end of if
}
//schreibt Frage in die GUI
public void ChangeButtonText(int button,String text){
ant[button-1].setText(text);
}
public void ChangeLabelText(String text){
frage.setText(text);
}
public void ChangeCounter(String text){
counter.setText(text);
}
//angezeigte Nachricht
public void Nachricht(String Aussage, String info){
Object[] options = { "OK"};
JOptionPane.showOptionDialog(null, Aussage, info,JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
}
//zählt die richtiigen Antworten
public void Ende(){
if (richtig <=11) {
richtig+=1;
} else {
Nachricht("Super", "Herzlichen Glückwunsch !");
System.exit(0);
} // end of if-else
}
//steuuern den Counter
public void add(){
erg = erg+2;
//return erg;
}
public void sub(){
erg = erg-3;
//return erg;
}
}
Fragen.java
Java:
public class Fragen {
//Variablen
int zufall;
String fragen[] = new String[19];
static String frage;
//Quiz-Fragen
public Fragen(){
fragen[1] = "Was ist die Hauptstadt von Brasilien?$São Paulo$Rio de Janeiro$Brasília$Porto Alegre$3";
fragen[2] = "Welches Land war bisher als einziger Teilnehmer bei allen 18 ausgetragenen WM-Endrunden vertreten?$Brasilien$England$Italien$Deutschland$1";
fragen[3] = "Bei welcher WM wurden Gelbe und Rote Karten eingeführt?$1958$1966$1970$1978$3";
fragen[4] = "welches Land hat die meisten WM-Finals verloren?$Deutschland$Uruguay$Italien$England$1";
fragen[5] = "Ein Hattrick ist schon eine Besonderheit, aber welchem Spieler gelangen in einer WM-Partie fünf Tore?$Oleg Salenko$Eusebio$Gustav Wetterström$Pélé$1";
fragen[6] = "Welcher Spieler schoss das schnellste Tor der WM-Geschichte?$Michael Ballack$Hakan Sükür$Ebbe Sand$Lucien Laurent$2";
fragen[7] = "Welches Team gewann alle Elfmeterschießen, zu denen es bei einer WM antreten musste?$Brasilien$Italien$Deutschland$England$3";
fragen[8] = "Wer wurde in der Vorrunde vom Platz gestellt und traf doppelt im Finale?$Diego Maradona$Zinedine Zidane$Michel Platini$Lionel Messi$2";
fragen[9] = "Welcher Trainer hat zwölf WM-Spiele in Folge gewonnen?$Franz Beckenbauer$Bora Milutinovic$Luiz Felipe Scolari$Berti Vogts$3";
fragen[10]= "Wie lautet der Name des WM-Balls 2014?$Jabulani$Teamgeist$Telstar$Brazuca$4";
//einige Fragen von: [url=http://www.spiegel.de/quiztool/quiztool-51703.html]Fußball-Quiz: Werden Sie WM-Weltmeister! - SPIEGEL ONLINE[/url]
frage = fragen[zufall(1,11)];
}
public int zufall(int min,int max){
zufall =(int) ((max-min)*Math.random()+min);
return zufall;
}
}
FrageChange.java
Java:
class FrageChange{
//Variablen
static String riFrage = null;
static String op1 = null;
static String op2 = null;
static String op3 = null;
static String op4 = null;
static int lösung = 0;
static QuizFenster quiz;
static Fragen fragenKlasse;
static String aktFrage;
static int erg =0;;
//wird in Hauptmethode gestartet
public FrageChange(){
QuizFenster quiz = new QuizFenster();
neueFrage();
}
//neue Frage
public static void neueFrage(){
fragenKlasse = new Fragen();
aktFrage = Fragen.frage;
parser();
aendereText();
updateCounter();
}
//zerlegt die Fragen in Frage,Optionen und Antwort
public static void parser(){
String[] frage = aktFrage.split("\\$");
for (int x=0; x< frage.length; x++) {
switch (x) {
case 0:
riFrage = frage[x];
break;
case 1:
op1 = frage[x];
break;
case 2:
op2 = frage[x];
break;
case 3:
op3 = frage[x];
break;
case 4:
op4 = frage[x];
break;
case 5:
lösung = Integer.parseInt(frage[x]);
break;
} // end of switch
} // end of for
System.out.println(riFrage);
}
//ändert den Text auf der GUI
public static void aendereText(){
System.out.println("test");
quiz.ChangeLabelText(riFrage);
System.out.println("test2");
quiz.lösung = lösung;
quiz.ChangeButtonText(1, op1);
quiz.ChangeButtonText(2, op2);
quiz.ChangeButtonText(3, op3);
quiz.ChangeButtonText(4, op4);
}
public static void updateCounter(){
quiz.ChangeCounter((String)"Du hasst"+erg+"von 20 Punkten");
}
}
Zuletzt bearbeitet: