Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen

Kristian

Mitglied
Hallo zusammen,

ich habe ein Problem das ich mir nicht erklären kann. Ich schreibe ein Programm das ein Balkenmuster synchron zur Mausbewegung verschieben soll. Das klappt so weit auch super. Nur leider bekomme ich jedes mal wenn ich das Programm ausführe gelegentlich eine Exception(besonders Häufig im Debug - Modus). Hier ist die Exception:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Stripes.paint(Stripes.java:164)
at javax.swing.RepaintManager$4.run(Unknown Source)
at javax.swing.RepaintManager$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1300(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(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)

Und hier der Code:

Java:
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
import java.awt.image.MemoryImageSource;
import java.awt.Robot;
import javax.swing.Timer;
import java.awt.Image;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;

import javax.swing.JFrame;
 
public class Stripes extends JFrame implements ActionListener, MouseMotionListener, KeyListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = -3314217310459535679L;
	Timer t = new Timer(20,this);
	int x = 0;
	int y = 0;
	int[][] stripes = new int[1][6];
	int moveX = 1;
	int moveY = 0;
	int mouseX = 0;
	int mouseY = 0;
	int stripesWidth = 0;
	int actualWidth;	
	int counter = 0;
	long oldTime = 0;
	long newTime = 0;
	long timeBtwMeasures = 0;
	int pixelsMoved = 0;
    Queue<Long> times=new LinkedList<Long>();
    Queue<Integer> distances=new LinkedList<Integer>();
	boolean mouseLocked = false;
	boolean measurementActive = false;
	boolean keepRunning = true;
	Image img = createImage(new MemoryImageSource(1, 1, new int[2], 0, 0));
	Toolkit kit = Toolkit.getDefaultToolkit();
	public Robot robot;
 
	public void setStripes(int width, int number){
		stripes = new int[number +1][6];
		this.stripesWidth = width;
	}
	
	private void stripesLoop(){
		while(keepRunning){
			recalcPositions();
			repaint();
		}
	}
	
	private void calcStripes(int width){
		int screenWidth = getWidth();
		int number = stripes.length -1;
		int spaceWidth = (screenWidth - (width*number)) / number;
		for (int i = 0; i < stripes.length; i+=1){
			stripes[i][0] = (i*width)+(i*spaceWidth);
			stripes[i][1] = 0;
			
		}
		
		actualWidth = getWidth();	
	}
	public static void main(String[] args){
		Stripes s = new Stripes();
		s.calcStripes(20);
		//s.stripesLoop();
	}
 
	public Stripes() {
		addKeyListener(this);
		addMouseMotionListener(this); 
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setUndecorated(true);
		this.setSize(800,600);
		setStripes(20,5);
		this.setVisible(true);
		this.createBufferStrategy(2);
        try {
			robot = new Robot();
		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		

	}
 
	private void recalcPositions() {
		for (int i = 0; i < stripes.length; i+= 1){
			/*Wegen der Drehung der Achsen nicht:
			stripes[i][0] += moveX;
			stripes[i][1] += moveY;
			Sondern:*/
			stripes[i][0] += moveY;
			stripes[i][1] = 0;
			
			if (stripes[i][0] < 0 && i != stripes.length -1){
				stripes[stripes.length -1][0] = getWidth() + stripes[i][0];
				stripes[stripes.length -1][1] = 0;
				stripes[stripes.length -1][2] = 1;
			}
			
			if (stripes[i][0] > getWidth() - stripesWidth && i != stripes.length -1){
				stripes[stripes.length -1][0] = (stripes[i][0]  - getWidth());
				stripes[stripes.length -1][1] = 0;
				stripes[stripes.length -1][2] = 1;
			}
			
			if ((stripes[i][0] > 0 && stripes[i][0] < getWidth() -stripesWidth) &&  i == stripes.length - 1/*stripes[i][2] == 1*/){
				stripes[i][2] = 0;
			}
					
			if (stripes[i][0] < 0 - stripesWidth ){
				stripes[i][0] = stripes[stripes.length -1][0];
				stripes[i][2] = 1;
			}
		
			if (stripes[i][0] > getWidth()){
				stripes[i][0] = stripes[stripes.length -1][0];
				stripes[i][2] = 1;
			}
		}
		moveX = 0;
		moveY = 0;
	}

	public void paint(Graphics g) {
		BufferStrategy bf = this.getBufferStrategy();
		g = null;

		if (actualWidth != getWidth()){
				calcStripes(stripesWidth);
		}
		try {
			g = bf.getDrawGraphics();
	 
			// It is assumed that mySprite is created somewhere else.
			// This is just an example for passing off the Graphics object.
			g.setColor(Color.blue);
			g.fillRect(0, 0, getWidth(), getHeight());
			g.setColor(Color.green);
			for (int i = 0; i < stripes.length; i+=1){
				if(i<stripes.length-1 || (i == stripes.length -1 && stripes[i][2] == 1 )){
										g.fillRect(stripes[i][0], stripes[i][1], stripesWidth, getHeight());
				}
			}
				 
		} finally {
			// It is best to dispose() a Graphics object when done with it.
			g.dispose();
		}
	 
		// Shows the contents of the backbuffer on the screen.
		bf.show();
	 
	        //Tell the System to do the Drawing now, otherwise it can take a few extra ms until 
	        //Drawing is done which looks very jerky
	        Toolkit.getDefaultToolkit().sync();	
	}

	public void actionPerformed(ActionEvent e) {
		
	}

	public void mouseDragged(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void mouseMoved(MouseEvent e) {
		int newX = e.getX();
		int newY = e.getY();
		newTime = System.nanoTime();
		moveX = newX - mouseX;
		moveY = newY - mouseY;
		mouseX = newX;
		mouseY = newY;
		if (moveY != 0){
			takeTime();
		}
		if(mouseLocked){
			robot.mouseMove(400,240);
			mouseX=400;
			mouseY=240;
			
		}
		recalcPositions();
		repaint();
	}

	private void takeTime() {
			counter +=1;
			if (oldTime == 0){
				oldTime = System.nanoTime();
				times.add((long) 0);
				distances.add(0);
				
			}else{
				times.add(System.nanoTime() -oldTime);
				distances.add(moveY);
				oldTime = System.nanoTime();
			}
			
		
	}

	public void keyPressed(KeyEvent event) {
		int code = event.getKeyCode();
		if (code == KeyEvent.VK_A){
			mouseLocked = !mouseLocked;
			if (mouseLocked){
				Cursor cursor = kit.createCustomCursor(img, new java.awt.Point(0,0),"Transparent");
				setCursor(cursor);
			}else{
				setCursor(Cursor.getDefaultCursor());
			}

			robot.mouseMove(400,240);
			mouseX=400;
			mouseY=240;
		}
		if (code == KeyEvent.VK_M){
			if (measurementActive){
				measurementActive = !measurementActive;
				try {
					saveData();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}else{
				measurementActive = !measurementActive;
			}
		}
		
	}

	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	public void keyTyped(KeyEvent event) {
		
	}
	private boolean saveData() throws IOException{
		FileWriter fw = new FileWriter("ausgabe42.txt");
		BufferedWriter bw = new BufferedWriter(fw);
		int size = times.size();
		bw.write(Integer.toString(size)+";" +counter+";");
		bw.newLine();
		for(int i = 1; i<=size;i+=1){
			bw.write(times.remove()+";"+distances.remove()+";");
			bw.newLine();
		}
		bw.close();
		return true;
		
	}
}

Wenn mir jemand sagen könnte wo mein Fehler liegt wäre ich sehr dankbar!

Viele Grüße
Kristian
 

VfL_Freak

Top Contributor
Moin,

habe deinen Code jetzt zwar nicht intensiv studiert, aber die meldung zeigt Dir doch die Stelle, wo es hapert:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Stripes.paint(Stripes.java:164)


Leider passen die Zeilennummern nicht wirklich, aber es dies sein :

Java:
public void paint(Graphics g) 
{
    BufferStrategy bf = this.getBufferStrategy();
    g = null;  // ???
    if (actualWidth != getWidth())
    {
        calcStripes(stripesWidth);
    }
    try
    {
        g = bf.getDrawGraphics();  // hier ist 'g' halt nicht initialisiert, sondern null
//......
Warum setzt Du 'g' dort auf null ??

Gruß Klaus
 

Kristian

Mitglied
Hallo Klaus,

ich habe mir einige Sachen aus dem Programm aus diversen Tutorials zusemman gesucht. Das mit dem g = null kommt hier her: Java:Tutorials:Double Buffering - GPWiki

Die exception passier in der Zeile 165
[Java]finally {
// It is best to dispose() a Graphics object when done with it.
g.dispose();
}[/Java]:

Die Frage die sich mir halt auch stellt ist warum diese Exception nicht IMMER kommt wenn ich das Programm starte...
 

VfL_Freak

Top Contributor
Moin,
ich habe mir einige Sachen aus dem Programm aus diversen Tutorials zusemman gesucht. Das mit dem g = null kommt hier her: Java:Tutorials:Double Buffering - GPWiki
ok, aber dort wird (im Gegensatz zu Deiner PaintMethode) auch nichts an "drawStuff" übergeben, ergo: es ist eine Variablendeklaration. Ob das in Deinem Kontext wirklich Sinn macht ???
Die exception passiert in der Zeile 165
[Java]finally {
// It is best to dispose() a Graphics object when done with it.
g.dispose();
}[/Java]:
ok, DAS ist doch mal 'ne Aussage :)
Du solltest bei solchen Aktionen IMMER prüfen, ob das Objekt = null ist, also etwas so:
[Java]
finally
{
if( null != g )
{
g.dispose();
}
}
[/Java]
Die Frage die sich mir halt auch stellt ist warum diese Exception nicht IMMER kommt wenn ich das Programm starte...
Lax gesagt, weil 'g' nicht immer null ist ..... :bae:
Schau' Dir hierzu Deine Ablauflogik an, ob und wann 'g' null ist oder werden kann !

Gruß Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
F Java exception bei der Ausführung Java Basics - Anfänger-Themen 10
J Exception für String Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben