Threads run() wird nicht aufgerufen?

KingOfExceptions

Bekanntes Mitglied
ich hab einen thread gemacht:
Code:
Thread thread=new Thread();
Code:
thread.start();

und ich möchte dass er folgendes macht:
Java:
public void run() 
	{
		System.out.println("WIRD GEMANCHT");
		
		while(frame.isVisible())
		{
			check();
			repaint();
			try{Thread.sleep(10);}catch(InterruptedException e){}
		}
		
	}

jedoch scheint er die methode noch nicht einmal aufzurufen...?

was hab ich falsch gemacht?
 
so das wäre der komplette code:

Java:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import java.util.Vector;

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

public class GamePanel extends JPanel implements KeyListener, Runnable
{
	private static final long serialVersionUID = 1L;

	Random rand=new Random();
	JFrame frame;

	Thread thread=new Thread();
		
	Vector positionsx=new Vector (50,5);
	Vector positionsy=new Vector(50,5);
	
	BufferedImage background;
	BufferedImage einsammel;
	BufferedImage spielpunkt;
	
	boolean up;
	boolean down;
	boolean left;
	boolean right;
	boolean gameEnd;
	
	int x=0;
	int y=0;
	int c=23;
	int v=23;
	
	int posxein=100;
	int posyein=100;
	
	boolean eingesammelt;
	
	public GamePanel (int w, int h)
	{		
		if(thread!=null)
			thread.start();
		
		this.setPreferredSize(new Dimension(w,h));
		frame=new JFrame("Spiel");
		frame.setLocation(300,150);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(this);
		frame.addKeyListener(this);
		getBilder();
		frame.pack();
		frame.setVisible(true);	
	}
	
	public void getBilder()
	{
		getEinsammelPunkte();
		getBack();
		getEinsammel();		
	}
	
	public void getBack()
	{
		try
		{
			background=ImageIO.read(getClass().getResourceAsStream("hintergrund.jpg"));
		}
		
		catch(IOException e){System.out.println("FEHLER");}
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(background, 25, 25, this);
		g.drawImage(einsammel, posxein, posyein, this);
		g.drawImage(spielpunkt, c, v, this);
		
	}		 
	
	public static void main(String[]args) //Fenster
	{
		new GamePanel(613,629);
	}
		
	public void getEinsammel()
	{
		try
		{
			einsammel=ImageIO.read(getClass().getResourceAsStream("einsammel.jpg"));
			spielpunkt=ImageIO.read(getClass().getResourceAsStream("spielpunkt.jpg"));
		}
		
		catch(IOException e){System.out.println("FEHLER BEI PUNKTEN");}
	}

	public void keyPressed(KeyEvent e) 
	{
		if(e.getKeyCode()==KeyEvent.VK_UP);
		up=true;
		
		if(e.getKeyCode()==KeyEvent.VK_DOWN);
		down=true;

		if(e.getKeyCode()==KeyEvent.VK_LEFT);
		left=true;
		
		if(e.getKeyCode()==KeyEvent.VK_RIGHT);
		right=true;
		
		check();
		
	}

	public void keyReleased(KeyEvent e)
	{
		if(e.getKeyCode()==KeyEvent.VK_UP);
		up=false;
		
		if(e.getKeyCode()==KeyEvent.VK_DOWN);
		down=false;

		if(e.getKeyCode()==KeyEvent.VK_LEFT);
		left=false;
		
		if(e.getKeyCode()==KeyEvent.VK_RIGHT);
		right=false;
		
		check();
	}
	
	public void check()
	
	{
		if(up)
		{
			if(v!=0)
			{
				v=v-1;
			}
			repaint();
		}
		
		if(down)
		{
			if(v<330)
			{
				v=v+1;
			}
			
			repaint();
		}

		if(up)
		{
			if(c!=0)
			{
				c=c-1;
			}
			
			repaint();
		}
		
		if(down)
		{
			if(c<960)
			{
				c=c+1;
			}
			
			repaint();
		}
		
		checkPosition();
	}

	public void keyTyped(KeyEvent e) 
	{
	}
	
	public void checkPosition()
	{		
		if(c==posxein&&v==posyein||c==posxein-1&&v==posyein||c==posxein-2&&v==posyein||c==posxein-1&&v==posyein-1||c==posxein-1&&v==posyein-2||c==posxein-2&&v==posyein-1||c==posxein-2&&v==posyein-2||c==posxein+1&&v==posyein||c==posxein+2&&v==posyein||c==posxein+1&&v==posyein+1||c==posxein+1&&v==posyein+2||c==posxein+2&&v==posyein+1||c==posxein+2&&v==posyein+2)
		{
			System.out.println("EINGESAMMELT");
			eingesammelt=true;
		}
	}
	
	public void getEinsammelPunkte()
	{
		getVectorelements();
		System.out.println("Laden beendet");
		posxein=(Integer) positionsx.elementAt(rand.nextInt(28));
		try{Thread.sleep(rand.nextInt(1));}catch(Exception e){}
		posyein=(Integer) positionsy.elementAt(rand.nextInt(29));
		System.out.println("GEMACHT");
	}

	public void getVectorelements() 
	{
		while(x!=546||y!=560)
		{
			positionsx.add(x);
			positionsy.add(y);
			x=x+20;
			y=y+20;
			positionsx.add(x);
			positionsy.add(y);
			x=x+19;
			y=y+20;
			System.out.println("Wurde durchgeführt "+x);
			System.out.println(+y);
		}
		
	}

	public void run() 
	{
		System.out.println("WIRD GEMANCHT");
		
		while(frame.isVisible())
		{
			check();
			repaint();
			try{Thread.sleep(10);}catch(InterruptedException e){}
		}
		
	}
	
}
 
Ich würd mal das lesen... Galileo Computing :: Java ist auch eine Insel - 12 Einführung in die nebenläufige Programmierung

Also wenn du mit Runable arbeitest, musst du dem Thread dieses Objekt mitgeben.
Was soll den der Thread sonst ausführen?

Java:
public class Test implements Runnable{

	public static void main(String[] args) {
		
		Thread thread = new Thread(new Test());
		thread.start();
		
		System.out.println("aus");
		
	}

	public void run() {
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
		}
		System.out.println("im Thread");
		
	}
}


statt deinem
if(thread!=null)
thread.start();
Machst du ein


Java:
		Thread thread = new Thread(this);
		thread.start();

Achtung:
if(e.getKeyCode()==KeyEvent.VK_LEFT);
left=false;

kein ; am ende von if!!!
 
Ja wie soll ich den das wissen?
Ich sage du sollst dein (was 0 Sinn ergibt)
Java:
if(thread!=null)
thread.start();
durch ein
Java:
Thread thread = new Thread(this);
thread.start();
ersetzen... und du vertippst dich oder vergissst irgend ein kleines ; was weiß ich...

Sorry aber ich komm mir hier blöd vor.
Du hast ein Problem. Ich frag nach. Du postest mir zu wenig. Ich frag nach... du postest 300 Zeilen code der an 4 Stellen mit dem Probelm was zu tun hat. ich sag dir genau was du durch was ersetzen musst.
Du sagst es geht nicht.

Soll ich jetzt nochmal nach dem code fragen?
 
1. ich hab dir den GANZEN code geschickt.?
Ja war ja ein Fehler drinnen.
2. ich hab es ganz genau ersetzt
ich auch... bei mir gehts..
3. was ist denn so schlimm an if(thread!=null) ?
[/quote]
Nix. Aber oben machst du ein
Thread thread=new Thread();
und unten startest du ihn
thread.start();

Aber der Thread an sich macht ja nix. Woher weiß das thread objekt was es zu tun hat?
1. Man überschreibt die run Methode von Thread
oder
2. Man überschreibt die run Methode von einem Runable (was du machst) und übergibt es an einen Thread (was du nicht machst)

ok... poste nochmal deinen geänderten code...

btw... dieses

Thread thread = new Thread(this);
thread.start();
musst du am ende vom Konstruktor machen, da ja sonst frame null ist
 
Ja, das war es wohl: Wenn man das
Thread thread = new Thread(this);
thread.start();
dort hinschreibt, wo vorher (beim ersten Codestück) der Thread erstellt wurde, haut das nicht hin...
Java:
public class GamePanel extends JPanel implements KeyListener, Runnable
{
...
    Thread thread=null; // new Thread(); NICHT hier den Thread erstellen....
        
...
    
    public GamePanel (int w, int h)
    {       
        thread = new Thread(this); //  Sondern hier....
        thread.start();
...

Aber wenn's daran hakt, könnte das hier noch ein laaaanger Thread werden...
 

Neue Themen


Zurück
Oben