Если я вызываю функцию draw без запуска потока, она работает, но если я пытаюсь настроить игровой цикл. Поэтому я думаю, что ошибка в том, как я запускаю игровой цикл, но я не знаю, как это исправить.
import java.awt.Dimension;
import javax.swing.*;
public class GameWindow{
public static final int WIDTH = 640;
public static final int HEIGHT = 480;
public static void main(String[] args) {
JFrame frame = new JFrame();
GamePanel panel = new GamePanel();
frame.setSize(new Dimension(WIDTH, HEIGHT));
frame.setMaximumSize(new Dimension(WIDTH, HEIGHT));
frame.setMinimumSize(new Dimension(WIDTH, HEIGHT));
frame.setPreferredSize(new Dimension(WIDTH, HEIGHT));
frame.setLocationRelativeTo(null);
frame.setTitle("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setVisible(true);
}
}
Второй класс
Я также пытался написать все только в одном классе, но это все равно не работает:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
public class GamePanel extends JComponent implements Runnable{
private Graphics2D g2;
private boolean isRunning = false;
public void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
if(isRunning)
return;
isRunning = true;
new Thread(this).start();
}
@Override
public void run() {
while(isRunning) {
update();
draw();
}
}
private void draw() {
Rectangle r = new Rectangle(10, 10, 10, 10);
g2.setColor(Color.BLACK);
g2.draw(r);
}
private void update() {
// TODO Auto-generated method stub
}
}