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