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

編集

実際、スレッドを初期化するとうまくいきました。そのように

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+スレッド化されたゲーム ループ (入力+更新+描画) を計画しています。間違っていますか?

4

2 に答える 2

0

あなたの質問は不明です。Thread1 は何をすべきか? Thread T1 の呼び出し方法と、クラスの作成方法について詳しく教えてください。ところで、あなたは T1 をプライベート アクセスにしましたが、あなたのクラスにはゲッター/セッターが表示されません。それを操作したい場合は、いくつかのメソッドを定義する必要があります。

Thread オブジェクトを継承するオブジェクトを指定しないと、確実に機能しません。参照してください: http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html Thread クラスは、Runnable インターフェイス自体を実装します。

あなたのコードの結論は、何が間違っているかを伝えることは不可能です。問題の分野が多すぎます。

アンソニー。

于 2013-07-30T15:19:56.167 に答える
0

スレッドを初期化していないため、NullPointerException. あなたの主な方法でそれを試してください

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

//通知しないか、要件に従って変更します。不明確な質問

于 2013-07-30T15:20:45.093 に答える