Thread-Fehler bei Excecutable Jar FIle

technikfreack

Mitglied
Hi,
ich hab mir jetzt mal ein Spiel mit Graphics2D zu einer ausführbaren JAR-File zusasmmengelegt. Leider bleibe ich hängen am Anfang mit den Threads:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at com.WrongUniverse.WrongUniverse.paint(WrongUniverse.java:180)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:794)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:735)
	at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
	at javax.swing.RepaintManager.access$700(RepaintManager.java:58)
	at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1593)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:617)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Ich hab ein wenig gegoogelt und glaube das es an dem Multithreading geht, weiß jemand ne Lösung? (JAR inkl. sourcecodes: http://stayn.toms-technical-site.com/files/wronguniverse.jar)

Danke
 
Code:
if(screenIndex >=0 && screenIndex < 5 || screenIndex >5) {
			//Gezeiten
			//if(timeObject.equals("moon")){				
				dbg.setComposite(AlphaComposite. getInstance(AlphaComposite.SRC_OVER, nightAlpha));

				dbg.drawImage(bgNight,0, 0,this);

				
				dbg.setComposite(AlphaComposite. getInstance(AlphaComposite.SRC_OVER, 1.0f));

			
			//}
				
				if(timeObject.equals("sun"))
				dbg.drawImage(imgSun,xSun, ySun,this);
				
				if(timeObject.equals("moon"))
				dbg.drawImage(imgMoon,xSun, ySun,this);
				
			
		}

Das sind die Zeilen 169-189 die ganze paint-funktion noch dazu? WEl das ist seehr viel...
 
hää? Wenn Deine Angabe 169-189 stimmt, dass wäre es oben Zeile 12 mit "//}" ... wohl kaum !

Außerdem kann man an dem kurzen Schnipsel doch nichts erkennen ... da könnten eine Variablen NULL sein ...

Gruß
Klaus

BTW:
Code:
if(screenIndex >=0 && screenIndex < 5 || screenIndex >5)
Was willst Du hier eigentlich abfragen?
Da würde dann auch
Code:
if( screenIndex >=0 )
// oder 
if( !screenIndex <0 )
reichen !!
 
Zuletzt bearbeitet:
Da frage ich den Bildschirminhalt ab:
SPIEL/MENÜ/GAMEOVER usw... (EDIT: In genau einem Menü soll dann das eben nicht passieren deswegen)

Gesamter Code:
Code:
package com.WrongUniverse;
//package / import //
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseMotionListener;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.imageio.ImageIO;
import javax.swing.*;

import com.WrongUniverse.*;
import com.WrongUniverse.input.*;
import com.WrongUniverse.ExtraLib.Echo;
import com.WrongUniverse.FileManager.*;
import com.WrongUniverse.WindowManager.*;

public class WrongUniverse extends JFrame implements Runnable, ComponentListener {


	private boolean running = false;
	
	private Image dbImage = null;
	public static Graphics dbgx;
	public static Graphics2D dbg;
	private KeyManager keyManager;
	private MouseManager mouseManager;
	private MouseMotionListener mouseMovingManager;

	private FileManager fileManager = new FileManager();
	private static XmlReader xReader = new XmlReader();
	
	public static int posX, posY;

	private FontMetrics fm;
	private int strWidth;

	
	public static int timeSpeed = 1000, time;
	
	public static boolean expertMode = false;
	
	public String title = "A WrongUniverse game 0.1";
	
	final Font font = new Font("sans-serif", 20, 20), fontSmall = new Font("sans-serif", 10, 10), fontHeader = new Font("sans-serif", 40, 40);

	public static String acIntroText = "-- -- -- -- --"; //see switch...
	public static int introInt = 0;
	public static boolean hideIntro = false;

	public static int screenIndex = -1; //-1-STAYN / o-Menu / 1-GAME / 2-OVER / 3-CREDITS

	private int x, y;
	
	public static int partParagraph = 0;
	
	public static String timeObject = "sun";
	
	public static float nightAlpha = 0.0f;
	
	public static int xSun, ySun;
	
	public static final int SCREEN_STAYN = -1; 
	public static final int SCREEN_MENU = 0;
	public static final int SCREEN_GAME = 1;
	public static final int SCREEN_GAMEOVER = 2; 
	public static final int SCREEN_GAMEOPTIONS = 3;
	public static final int SCREEN_CREDITS = 4;	
	public static final int SCREEN_GAMEMENU = 5;
	public static final int SCREEN_OPTIONS = 6;
	
	//LANG {
	
	public static String lang = "en_EN";
	
	
	// } END LANG //
	
	public static Echo echo, echo2;
	
	private String timeString = "none";
	
	public static int xDisplay = Toolkit.getDefaultToolkit().getScreenSize().width, yDisplay = Toolkit.getDefaultToolkit().getScreenSize().height;

	public static int xScreen, yScreen;
	
	public static Image imgStayn = Toolkit.getDefaultToolkit().getImage("img/stayn.png");
	public static Image imgTitle = Toolkit.getDefaultToolkit().getImage("img/menu/title2.png");
	public static Image imgForest = Toolkit.getDefaultToolkit().getImage("img/part1/forest.png");
	public static Image imgCredits = Toolkit.getDefaultToolkit().getImage("img/menu/credits.png");

	public static String bufString = "null";
	
	public static WrongUniverse wrongUniverseFrame;
	
	Image imgMoon = Toolkit.getDefaultToolkit().getImage("img/misc/moon.png");
	Image imgSun = Toolkit.getDefaultToolkit().getImage("img/misc/sun.png");
	
	Image imgTree = Toolkit.getDefaultToolkit().getImage("img/decoration/tree.png");

	Image bgNight = Toolkit.getDefaultToolkit().getImage("img/misc/night.png");
	
	Image icMenu = Toolkit.getDefaultToolkit().getImage("img/gui/menu.png");

	
	public WrongUniverse() {
	
		//constructor
		super(XmlReader.lang.getProperty("title"));
		setSize(920,640); 
		setLayout(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(true);
		setLocation(200,200);
		
		//setLayout(new FlowLayout());
		
		
		JButton panel = new JButton("Telefon");
		add(panel);

		
		
		addKeyListener(keyManager = new KeyManager(this));
		addMouseListener(mouseManager = new MouseManager(this));
		addMouseMotionListener(mouseMovingManager = new MouseMovingManager(this));

		(new Thread(this)).start();
		
		addComponentListener(this);
		
		setVisible(true);
	
	}
	

	
	public void update(Graphics g) {
		xScreen = getWidth();
		yScreen = getHeight();
		paint(g);
		
	}
	
	public void paint(Graphics g) {
		//if(dbImage == null) {
			
			xScreen = getWidth();
			yScreen = getHeight();
			
			dbImage = createImage(xScreen,yScreen);
			dbgx = dbImage.getGraphics();
			dbg = (Graphics2D) dbgx; 
		//}
		
	
		
		dbg.setColor(Color.WHITE);
		xScreen = getWidth();
		yScreen = getHeight();
		dbg.fillRect(0, 0, xScreen, yScreen);

		if(screenIndex >=0 && screenIndex < 5 || screenIndex >5) {
			//Gezeiten
			//if(timeObject.equals("moon")){				
				dbg.setComposite(AlphaComposite. getInstance(AlphaComposite.SRC_OVER, nightAlpha));

				dbg.drawImage(bgNight,0, 0,this);

				
				dbg.setComposite(AlphaComposite. getInstance(AlphaComposite.SRC_OVER, 1.0f));

			
			//}
				
				if(timeObject.equals("sun"))
				dbg.drawImage(imgSun,xSun, ySun,this);
				
				if(timeObject.equals("moon"))
				dbg.drawImage(imgMoon,xSun, ySun,this);
				
			
		}
		
		switch (screenIndex) {
		case -1:
			
			
			
			x = (getWidth()-imgStayn.getWidth(this))/2;
			y = (getHeight()-imgStayn.getHeight(this))/2;
		    //dbg.drawImage(imgStayn, x, y, this);
			dbg.drawImage(imgStayn,x, y,this);

	        break;
		case 0:
					
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			dbg.setFont(fontHeader);
			dbg.setColor(Color.BLACK);
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("title"));
	        dbg.drawString(XmlReader.lang.getProperty("title"), xScreen / 2 - strWidth / 2, 150);
			
			dbg.setFont(font);
			dbg.setColor(Color.BLACK);
			
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("startgame"));
	        dbg.drawString(XmlReader.lang.getProperty("startgame"), xScreen / 2 - strWidth / 2, 200);
	        
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("loadgame"));
	        dbg.drawString(XmlReader.lang.getProperty("loadgame"), xScreen / 2 - strWidth / 2, 225);
	        
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("options"));
	        dbg.drawString(XmlReader.lang.getProperty("options"), xScreen / 2 - strWidth / 2, 250);

			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("about"));
	        dbg.drawString(XmlReader.lang.getProperty("about"), xScreen / 2 - strWidth / 2, 275);      
			//dbg.drawString("Press [ENTER] to start the game.", 150, 250);
			break;
			
		case 1:
			
			lang="en_EN";
			xReader.xReload();
			
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			dbg.drawImage(icMenu,xScreen-64, 0, 64, 64,this);
			
			dbg.setColor(Color.BLACK);
			dbg.drawLine(0, 15, xScreen-64, 15);
			
			
			
			dbg.drawImage(imgTree,-200, yScreen-520,this);
			
			dbg.drawImage(imgTree,xScreen-280, yScreen-460,this);
			
			dbg.setFont(font);
			dbg.setColor(Color.BLACK);
			
			if(!hideIntro){
			
			fm = dbg.getFontMetrics();
			//
	        strWidth = SwingUtilities.computeStringWidth(fm, acIntroText);
	        //dbg.drawString("[ " + acIntroText + " ]", xScreen / 2 - strWidth / 2, yScreen - fm.getAscent() / 2);

			}
	        
	        
			break;
			
		case 2:
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			dbg.setFont(font);
			dbg.setColor(Color.RED);	
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("gameover"));
	        dbg.drawString(XmlReader.lang.getProperty("gameover"), xScreen / 2 - strWidth / 2, 300+22);
			dbg.setColor(Color.BLACK);
	        fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("tryagain"));
	        dbg.drawString(XmlReader.lang.getProperty("tryagain"), xScreen / 2 - strWidth / 2, 300+44);
			break;
			
		case 3:
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			dbg.setFont(fontSmall);
			dbg.setColor(Color.BLACK);

			dbg.drawString(XmlReader.lang.getProperty("esccontinue"), 5, yScreen-20);
			dbg.drawString(XmlReader.lang.getProperty("savegame"), 5, yScreen-10);
			
			dbg.setColor(Color.MAGENTA);
			dbg.setFont(font);
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("gamepaused"));
	        dbg.drawString(XmlReader.lang.getProperty("gamepaused"), xScreen / 2 - strWidth / 2, 300 + 22);
			
	        dbg.setColor(Color.BLACK);
			dbg.setFont(font);
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("continuegame"));
	        dbg.drawString(XmlReader.lang.getProperty("continuegame"), xScreen / 2 - strWidth / 2, 300 + 44);

			break;
			
		case 4:
			
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			dbg.setFont(font);
			dbg.setColor(Color.BLACK);
	        dbg.drawString("Programmed by:",100,100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("Tom Schneider",122,122);
	        
			dbg.setFont(font);
	        dbg.drawString("Graphics by:",100+250,100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("Tom Schneider",122+250,122);
	        
			dbg.setFont(font);
	        dbg.drawString("Storyboard by:",100+500,100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("Tom Schneider",122+500,122);
	        
	        //NEXT LINE
			dbg.setFont(font);
	        dbg.drawString("Sounds by:",100,100+100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("--not implemented yet.",122,122+100);
	        
			dbg.setFont(font);
	        dbg.drawString("(c) 2012,",100+250,100+100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("Tom Schneider (STAYN)",122+250,122+100);
	        
			dbg.setFont(font);
	        dbg.drawString("Rights:",100+500,100+100);
	        dbg.setFont(fontSmall);
	        dbg.drawString("All rights reserved.",122+500,122+100);
	        
			dbg.setFont(font);
	        dbg.drawString("<< Back to menu",100,620);
	        
	        
			break;
			
		case 5:
			
			dbg.setColor(Color.RED);
			dbg.drawString(Integer.toString(1000),100,100);
	        dbg.setColor(Color.BLACK);
			break;
		
		case 6:
			x = 0;
			yScreen = getHeight();
			y = yScreen - 400;
			//echo.write(yScreen + " S | - " + y);
			dbg.drawImage(imgTitle,x, y,this);
			
			
			dbg.setColor(Color.BLACK);
			dbg.setFont(font);
			
			
			fm = dbg.getFontMetrics();
	        strWidth = SwingUtilities.computeStringWidth(fm, XmlReader.lang.getProperty("options"));
	        dbg.drawString(XmlReader.lang.getProperty("options"), xScreen / 2 - strWidth / 2, 50);
			
			
			break;
			
			
			
			
		}

		
		dbg.setFont(fontSmall);
		dbg.setColor(Color.BLACK);

		
		/*dbg.drawString("A WrongUniverse Game Alpha 0.1 | ScreenIndex [" + 
		screenIndex + "]" + " | IntroIndex [" + introInt + "]" +
		" | MousePosition: " + posX +"/"+ posY, 5, 10); */
		
		if(screenIndex >= 0) {
		
		if(timeObject.equals("sun"))
			timeString = XmlReader.lang.getProperty("timeDay");
		if(timeObject.equals("moon"))
			timeString = XmlReader.lang.getProperty("timeNight");
		
		
		dbg.drawString("Wrong Universe Alpha 0.1 | " +
				XmlReader.lang.getProperty("time") + " "+timeString+" | ", 5, 10);
		
		if(expertMode) {
			dbg.setFont(fontSmall);
			dbg.setColor(Color.BLACK);
			
			
			dbg.drawString("ScreenIndex [" + screenIndex + "]", 5, 20);
			
			dbg.drawString("IntroIndex [" + introInt + "]", 5, 30);
			
			dbg.drawString("MousePosition [" + posX +" | "+ posY+"]", 5, 40);
			
			dbg.drawString("Time [" + time + "] - Speed ["+timeSpeed+"]", 5, 50);

			
			
		}
		
		}
		
		g.drawImage(dbImage, 0, 0, null);
		

	}
	
	public static void main(String[] args) throws Exception {

		
		echo = new Echo();
		//echo.write("HI!");
		
		
		new FileManager();
		if(FileManager.options.getProperty("lang").equals("de")) {
			lang="de_DE";
		}else{
			lang="en_EN";
		}
		echo.write("lang is in pro "+FileManager.options.getProperty("lang"));
		echo.write("lang setted to "+lang);
		
		xReader=new XmlReader();

		wrongUniverseFrame = new WrongUniverse();

		
		

    	//acIntroText = acIntroText.replaceAll("...WrongUniverse...", "");  
        
        echo.write("STAYN...");

        Thread.sleep(1000);
    	echo.write("start the game...");
    	screenIndex = 0;
    
        
        
    	int w = 1;
        
        while(w!=0) {

        	//Thread.sleep(5000);
        	//lang="en_EN";

        if(screenIndex == 0) {
        	
        	
            echo.write("Sonnenuntergang");

            for(int i=40; i<=yScreen;i++) {
         	   
            	timeObject = "sun";	
            	
            	time = i-40;
            	
            	xSun = 40;
            	ySun = i;
            	
            	if((float)i>=yScreen-100) {
            		//echo.write(((float)i-yScreen+100)/100);
            		nightAlpha = ((float)i-yScreen+100)/100;
            	}
            	
            	Thread.sleep(timeSpeed);
        	
            	}
        
            
            
            	echo.write("Mondaufgang");

            	for(int i=yScreen; i>=40;i--) {
            	
            	timeObject = "moon";	
            	
            	time = i-40;
            		
            	xSun = 40;
            	ySun = i;
            	Thread.sleep(timeSpeed);
        	
            	}

 
        	Thread.sleep(5000);

            	echo.write("Monduntergang");

            	for(int i=40; i<yScreen;i++) {
            	
            	timeObject = "moon";	
            	
            	time = i-40;
            		
            	xSun = 40;
            	ySun = i;
            	
            	if((float)i>=yScreen-100) {
            		//echo.write(nightAlpha);
            		
            		nightAlpha = nightAlpha-0.01f;
            	}
            	
            	Thread.sleep(timeSpeed);
            	
        	
            	}

            	echo.write("Sonnenaufgang");

            	for(int i=yScreen; i>=40;i--) {
            	   
            	timeObject = "sun";	
            	
            	time = i-40;
            		
            	xSun = 40;
            	ySun = i;
            	Thread.sleep(timeSpeed);
            	
        	
            	}

            	
            	Thread.sleep(5000);

        	
        	
        	}
        }
  	}
        	
	
	
	
	public void run() {
		running = true;
		
		while(running){
			process();
			repaint();
			
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				
				e.printStackTrace();
				
			}
			
		}
	
	}
	
	

	
	public void process() {
		keyManager.processKeys();
	}

	
	public void componentResized(ComponentEvent e) {
        displayMessage(e.getComponent().getClass().getName() + " --- Resized ");  
        if(screenIndex >= 1) screenIndex = 3;
    }
	
	
	private void displayMessage(String string) {
		echo.write(string);
		
	}



	public int isScreenIndex() {
		return screenIndex;
	}

	public void setScreenIndex(int screenIndex) {
		this.screenIndex = screenIndex;
	}



	@Override
	public void componentHidden(ComponentEvent arg0) {
		
		if(screenIndex >= 1) screenIndex = 3;
		
	}



	@Override
	public void componentMoved(ComponentEvent arg0) {
		if(screenIndex >= 1) screenIndex = 3;
		
	}



	@Override
	public void componentShown(ComponentEvent arg0) {
		if(screenIndex >= 1) screenIndex = 3;
		
	}
	
}
 
Zuletzt bearbeitet:
hmm, Zeile 180 wäre damit immer noch "//}" ...
Sicher das der Code so stimmt ?

Setz' mal Breakpunkte in die 3 Zeilen davor und prüfe den Inhalt der jeweiligen Variablen im Debugger ....
Ich denke, dass da der Hund begraben liegt (habe den Code jetzt nicht im Detail nachvollzogen) !

Gruß
Klaus
 
Also über ECLIPSE kann ich das super starten, aber wenn ich es exportiere zu einer JAR gehts nicht mehr und die Fehlermeldung kommt.
 
Wird bei dir evtl. nicht korrekt compiliert? Oder das JAR-File nicht korrekt gepackt? An sonsten würde ich mal ne alternative JVM ausprobieren…
 

Neue Beiträge

Zurück