Interpreter-Fehler Fehler bei Ausführen des Programmes

  • Themenstarter Themenstarter error007
  • Beginndatum Beginndatum
E

error007

Gast
Hallo!

Wenn ich mein Programm ausführe, dann öffnet sich zwar das Fenster mit dem Reaktionsbutton, aber es kommt in der Console unten folgender Fehler(Compiler-Fehler oder?):

Code:
java.lang.NullPointerException
	at uebung002_reaction.MainFrame.getRand(MainFrame.java:63)
	at uebung002_reaction.MainFrame.FrameInit(MainFrame.java:57)
	at uebung002_reaction.MainFrame.<init>(MainFrame.java:25)
	at uebung002_reaction.Application.<init>(Application.java:12)
	at uebung002_reaction.Application$1.run(Application.java:38)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Java-Code:
Java:
//MainFrame.java
package uebung002_reaction;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class MainFrame extends JFrame {
  private static final int BEGIN = 400;
  private static final int OFFSET = 300;
	
  private JPanel contentPane;
  private JPanel panel_react;
  private JButton button_react;
  private javax.swing.Timer timer;
  private Random random;
  private JLabel text;
  private long starttime;
  private boolean started = false;
  
  
  public MainFrame() {
    try {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      FrameInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }

  /**
   * Component initialization.
   *
   * @throws java.lang.Exception
   */
  private void FrameInit() throws Exception {
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(new BorderLayout());
    setSize(new Dimension(400, 300));
    setTitle("Frame Title");
    
    panel_react = new JPanel();
    button_react = new JButton("Reaktionstaste: Start");
    text = new JLabel();
    panel_react.setLayout(new FlowLayout());
    panel_react.setBackground(Color.GREEN);
    
    panel_react.add(button_react);
    panel_react.add(text, BorderLayout.SOUTH);
    
    button_react.setFont(new Font("Arial",Font.BOLD,30));
    
    contentPane.add(panel_react);
    
    button_react.addActionListener(new Button_Listener());
    timer = new javax.swing.Timer(getRand(), new Timer_Listener());
    
    random = new Random();
  }
  
  private int getRand() {
	  return(random.nextInt(BEGIN) + OFFSET);
  }
  
  public void buttonHandler() {
	  if(!started)
	  {
	    timer.start(); 
	    started = true;
	    button_react.setText("PRESS");
	  }
	  else 
	  {
		  long react_time = System.currentTimeMillis() - starttime;
		  button_react.setEnabled(false);
		  show_value(react_time);
		  timer.setInitialDelay(getRand());
	  }
  
  }
  
  private void changeColor() {
	  if(panel_react.getBackground() == Color.GREEN)
	  {
		 panel_react.setBackground(Color.RED);  
	  }
	  else
	  {
		 panel_react.setBackground(Color.GREEN);
	  }
  }
  
  private void show_value(long time_value) {
	  text.setText("Reaktionszeit:" + time_value);
  }
  
  private void timerHandler() {
	  changeColor();
	  starttime = System.currentTimeMillis();
  }
  
  private class Button_Listener implements ActionListener {
  	public void actionPerformed(ActionEvent ae) {
  		buttonHandler();
  	}
  }
  
  
  private class Timer_Listener implements ActionListener {
  	public void actionPerformed(ActionEvent ae) {
  		timerHandler();
  	}
  }
}

Die anderen Programm haben immer funktioniert, nur hier auf einmal kommt so ein komischer Text, den ich noch nie hatte.

PS:Wenn ihr weitere Infos bzw. die 2. .java Datei braucht, sagen bitte.

mfg
 
Code:
random = new Random();
muss ausgeführt werden bevor die Methode getRand aufgerufen wird.

Die anderen Programm haben immer funktioniert, nur hier auf einmal kommt so ein komischer Text, den ich noch nie hatte.
Dieser "komische Text" nennt sich Stack Trace und ist eines der wichtigsten Sachen überhaupt um Fehler zu erkennen. Du musst unbedingt lernen wie man ihn liest, sobald du das kannst kannst du dir bei fast allen Problemen selber helfen anstatt jemand anderen Fragen zu müssen.
 
Zuletzt bearbeitet:
Danke dir!

Ich hätte da noch ne Frage.

Ich möchte, dass das Label text(also die Reaktionszeit) unter den 2 Buttons steht oder am Ende des Fensters?

Wie kann ich das lösen? Ich komme einfach nicht mit den doofen Border- und FlowLayouts zurecht.

FlowLayout reiht die Elemente genau nach der Reihe auf und BorderLayout machte sie Fensterbreite oder Fensterlänge groß, so irgendwie.

Kann mir bitte jemand zeigen wie ich das machen könnte?

Danke!
 
entweder ohne layoutmanager und dann mit setBounds() oder sieh dir mal die anderen layoutmanager an ... es gibt einige mit denen sowas möglich ist ... jedoch alles etwas umständlich zu programmieren und daher meist nur von gui-buildern genutzt
 

Zurück
Oben