Jpanel调用一个线程

时间:2013-07-30 15:10:28

标签: java multithreading jpanel

我正在使用setContentPane(new Gamepanel())从另一个类调用此类。 为什么线程t1没有调用run方法?

public class GamePanel extends JPanel implements Runnable {

    public static int WIDTH = 1024;
    public static int HEIGHT = WIDTH / 16 * 9;
    private Thread t1;
    boolean running;


    public void addNotify(){
        Dimension size = new Dimension(WIDTH,HEIGHT);
        setPreferredSize(size);
        running = true;
        t1.start();
    }


    public void paintComponent (Graphics g){
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.BLACK);
        g.fillOval(200, 200, 50, 50);
    }


    public void run() {
        while (running){
            System.out.println("Runs");
    }
}

修改

嗯,实际上初始化Thread就可以了。像那样

public class GamePanel extends JPanel implements Runnable {

    public static int WIDTH = 1024;
    public static int HEIGHT = WIDTH / 16 * 9;
    private Thread t1;
    boolean running;


    public void addNotify(){
        Dimension size = new Dimension(WIDTH,HEIGHT);
        setPreferredSize(size);
        running = true;
        t1 = new Thread(this);
        t1.start();
     }



    public void paintComponent (Graphics g){
            g.setColor(Color.WHITE);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.BLACK);
        g.fillOval(200, 200, 50, 50);
     }


     public void run() {
         while (running){
         System.out.println("Runs");
         }

     }

}

我假设这是开始在start方法中开始游戏循环的正确方法。 我打算去JFrame + JPanel +线程游戏循环(输入+更新+绘图)。我错了吗?

2 个答案:

答案 0 :(得分:0)

你的问题不清楚。 Thread1应该做什么? 请告诉我们您调用Thread T1的方式以及如何构建课程的详细信息。 顺便说一句,你把T1放在私人访问中,我没有在你的班级看到任何getter / setter。 如果你想操纵它,你将不得不定义一些方法。

如果你没有给一个继承Thread对象的对象,那么肯定它不会起作用。 请参阅:http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html Thread类实现了自己的Runnable接口。

我的代码结论是不可能告诉你什么是错的,他们有太多的问题领域。

安东尼。

答案 1 :(得分:0)

你没有初始化线程,它必须给你一个NullPointerException。 试试吧 在你的主要方法

 t1=new Thread(new GamePanel());
 t1.start();

//根据您的要求不通知或修改它。 问题不明确