【发布时间】:2011-07-08 18:19:29
【问题描述】:
在尝试了大约 2 小时后,我遇到了一个无法上班的问题。我想要一个循环来执行 2 种方法(绘制和更新),但还要听鼠标/键盘事件。我有一个绘制和更新的循环,但在循环之外什么都不做(监听事件)我尝试了很多东西,但没有任何效果。请帮忙?
我尝试使用 Runnable Thread,使用不同的命令,使用 wait() 和 notify(),我尝试了很多东西。但基本上我想知道如何运行循环并仍然检查用户输入
此外,当我尝试点击红色“X”退出程序时,它不会退出但仍然可以工作
这是代码:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class main extends Applet implements MouseListener, Runnable {
public main() {
super();
init();
}
Thread t;
Screen screen = new Screen();
String Text = "Hello";
boolean Running = true;
boolean Click = false;
int R = 0x00;
int G = 0x00;
int B = 0x00;
int xpoints[] = {25, 40, 40, 25, 25};
int ypoints[] = {40, 40, 25, 25, 25};
int npoints = 5;
public void run() {
while (Running) {
GameLoop();
}
}
public void init() {
this.addMouseListener(this);
this.setSize(400, 300); //manually set your Frame's size
t = new Thread(this);
t.start();
}
public void paint(Graphics g) {
g.setColor(new Color(R, B, G));
g.fillPolygon(xpoints, ypoints, npoints);
Running = true;
t.run();
}
public void mousePressed(MouseEvent e) { //On Mouse Click
System.exit(0);
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
System.exit(0);
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public boolean keyDown(Event e, int key) {
return true;
}
public void GameLoop() {
if (Running) {
if (R != 0xff) {
R++;
} else {
if (G != 0xff) {
G++;
} else {
if (B != 0xff) {
B++;
} else {
System.exit(0);
}
}
}
try {
sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
paint(getGraphics());
}
}
public void sleep(int time) throws InterruptedException {
Thread.sleep(time, 0);
}
}
【问题讨论】:
-
你能显示代码吗?我了解,但如果您显示代码,我会了解更多。 :)
-
我们需要更多关于您已经尝试过的信息。
-
如果您正确编写了 GUI,那么您已经处于事件处理循环中,您无需执行任何其他操作,只需注册您感兴趣的事件(在本例中为鼠标/键盘),然后在您注册的方法启动时做一些有用的事情。但是,您应该使用 SwingUtilities 通过其方便的 invokeLater 方法将屏幕刷新(绘制/更新)委托给另一个线程。如果您需要详细的帮助,您应该发布一些代码。
标签: java events loops input mouse