【发布时间】:2014-06-17 02:28:14
【问题描述】:
我有以下代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.text.View;
public class ex10 extends JPanel {
private int x=1;
int y=1;
//Constructor
public ex10() {
while(true) {
System.out.println("x ->"+ x);
System.out.println("y ->" + y);
x = randomposition(x);
y = randomposition(y);
this.repaint();
}
}
public int randomposition(int value) {
Random random = new Random();
if (random.nextBoolean() == true) {
if (value+1 != 500) {
value++;
}
}
else {
if (value-1 != 0) {
value--;
}
}
return value;
}
@Override
public void paintComponent(Graphics g) {
//super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(x, y, 20, 20);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(new ex10());
}
}
不幸的是,当调用this.repaint() 时,该点没有显示,但我仍然得到System.out.println。我尝试单独设置一个新线程,但无济于事。
我尝试了一些其他解决方案(invokelater 和 paintimmediately),也无济于事。
我的目标是设置一个在屏幕上徘徊的绿点。 你有什么解决办法吗?
【问题讨论】:
-
你需要了解一些关于 Swing 的知识,比如提到的 SwingTimer 或 how to work with threads in Swing(你的主要需要打电话给
invokeLater)但是有一个更基本的非 Swing 问题:不要在构造函数中放置无限循环,它永远不会结束对象的构造,并且您调用它的代码将在该点冻结。 -
我明白了,现在一切都清楚了,谢谢!
标签: java multithreading swing animation graphics