我在语音标记中出现了小故障,因为我确信这不是小故障。
我最近才开始使用JFrames进行编码,实际上几个月前我就在学校里开始使用Java,但是最近我试图用这些方便的框架来推动我的理解。
我制作了一个程序,该程序可以在框架周围弹起一个球,所以我想使其变成2(现在它们不会发生碰撞),但是每当我尝试添加另一个时,它只会显示一个。 这是代码:
public static void main(String[] args) throws InterruptedException{
JFrame frame = new JFrame("Hello There");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
frame.setLayout(new FlowLayout());
Main ball = new Main();
Main ball2 = new Main();
ball2.SetValues(200, 200, Color.BLUE);
frame.add(ball2);
frame.add(ball);
while (true) {
ball.move();
ball.repaint();
ball2.move();
ball2.repaint();
Thread.sleep(5);
}
}
public void move() {
x = x + xDirection;
y = y + yDirection;
if (x < 0) { //If Ball has gone off the screen on x direction
xDirection = 1; //Start moving to the right
} else if (x > getWidth() - 50) { //If x has gone off the screen to the right
xDirection = -1;//Start moving to the left
}
if (y < 0) { //If Ball has gone off the screen on x direction
yDirection = 1; //Start moving to the right
} else if (y > getHeight() - 50) { //If x has gone off the screen to the right
yDirection = -1;//Start moving to the left
}
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(color);
g.fillOval(x, y, 50, 50);
}
我最近添加了“ frame.setLayout(new FlowLayout()”行,它似乎显示了两个球,但它们处于故障状态。
有人可以帮我吗?
答案 0 :(得分:0)
您不应该在Swing
线程上睡觉或进行任何长时间的处理,也不应从其他线程更新gui。参见Concurrency in Swing
一种替代方法是使用javax.swing.Timer
:
Timer timer = new Timer(5, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ball.move();
ball.repaint();
ball2.move();
ball2.repaint();
}
});
timer.start();
另一种替代方法是使用separate thread