0

我用 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+线程游戏循环(输入+更新+绘图)。我错了吗?

4

2 回答 2

0

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

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

//不是根据您的要求通知或修改它。不清楚的问题

于 2013-07-30T15:20:45.093 回答
0

你的问题不清楚。Thread1 应该做什么?请向我们提供有关您调用 Thread T1 的方式以及如何构建类的详细信息。顺便说一句,您将 T1 设置为私有访问,我在您的班级中看不到任何 getter/setter。如果你想操作它,你必须定义一些方法。

如果您不提供继承 Thread 对象的对象,那么它肯定不会起作用。请参阅:http ://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html 线程类实现自身的 Runnable 接口。

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

安东尼。

于 2013-07-30T15:19:56.167 回答