启动运行命令的问题
问题描述:
首先,我想说如果我的问题听起来不太具体,我对编程知之甚少,请原谅我。启动运行命令的问题
这段代码的问题是,我希望它随机移动方块(虽然知道它只是说嗨,但重复),但运行()没有激活。
代码:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.net.*;
public class Square extends JApplet {
int X = 10;
int Y = 10;
public void init() {
FlowLayout flow = new FlowLayout();
setLayout(flow);
}
public void paint(Graphics screen) {
// Paint lines
Graphics2D g2 = (Graphics2D) screen;
g2.draw(new Line2D.Double(X, Y, (X + 50), Y));
g2.draw(new Line2D.Double(X, Y, X, (Y + 50)));
g2.draw(new Line2D.Double(X, (Y + 50), (X + 50), (Y + 50)));
g2.draw(new Line2D.Double((X + 50), (Y + 50), (X + 50), Y));
}
public void run() {
System.out.println("Hi2");
while (true) {
System.out.println("Hi");
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// do nothing
}
}
}
public static void main(String[] args) {
JFrame f = new JFrame("Square");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
JApplet applet = new Square();
f.getContentPane().add("Center", applet);
applet.init();
f.pack();
f.setSize(new Dimension(550,100));
f.setVisible(true);
}
}
(我知道我进口的几件事情,我可能并不需要,我复制了一些这从另一个代码)
答
虽然你有run
方法,类不执行Runnable
,因此它不能用于Thread
。为了让您的Thread
运行,你就必须实现Runnable
和创建init
新Thread
:
new Thread(this).start();
,如果你打算与UI组件交互,忘掉Threads
。 Swing有它自己的concurrency mechanisms,它们允许您安全地与UI组件进行交互。看看使用Swing Timer来代替。
+0
谢谢!我会仔细研究它! – Jdman216 2013-03-06 22:58:12
http://docs.oracle.com/javase/tutorial/deployment/applet/index.html – Aubin 2013-03-06 22:05:52
你对run()方法有什么期待?它永远不会被调用。 – Aubin 2013-03-06 22:11:19