Java Jpanel调用线程

Java Jpanel调用线程,java,multithreading,jpanel,Java,Multithreading,Jpanel,我使用setContentPane(newGamepanel())从另一个类调用这个类。 为什么线程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;

我使用setContentPane(newGamepanel())从另一个类调用这个类。 为什么线程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");
    }
}
编辑

事实上,初始化线程就成功了。那样

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");
         }

     }

}
我假设这是一个正确的方式开始把一个游戏循环的开始方法。 我计划使用JFrame+JPanel+线程游戏循环(输入+更新+绘图)。我错了吗?

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

如果你不给一个继承线程对象的对象,它肯定不会工作。 请参阅: Thread类实现自己的可运行接口

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


Anthony。

您没有初始化线程,它必须向您抛出
NullPointerException
。 试试看 在你的主要方法中

 t1=new Thread(new GamePanel());
 t1.start();
//不在通知或修改它根据您的要求。
不清楚的问题

这会引发NullPointerException,因为您从未初始化
t1
。。。您需要一个
t1=新线程(这个)某处。请注意,无论您试图实现什么,几乎肯定有更好的方法。线程和swing组件不会混合使用。阅读