【发布时间】:2015-04-05 23:28:39
【问题描述】:
我有一个播放简单动画的全屏窗口,我想让它在我按下任意键时恢复全屏并停止程序。 关键侦听器类如下所示:
导入 java.awt.event.*;
公共类密钥实现 KeyListener {
private framerun animation=new framerun();
public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){
animation.x=false;
}
}
动画在一个方法 run 中运行,带有一个如下所示的 while 循环:
public void run(DisplayMode dm){
Screen s=new Screen();
s.setFullScreen(dm, this);
while(true){
try{
System.out.println(x);
Thread.sleep(300);
}catch(Exception e){}
if(!x)
s.RestoreScreen();
repaint();
}
}
PS:x是一个布尔值,初始值为true,在构造函数中初始化。
这是主要方法:
public static void main(String args []){
DisplayMode dm=new DisplayMode(800, 600, 16,DisplayMode.REFRESH_RATE_UNKNOWN);
framerun f=new framerun();
key k=new key();
f.addKeyListener(k);
f.run(dm);
}
现在,如果没有 while 循环,这将完美运行。全屏关闭,程序停止。但是在while循环中,当我按下一个键时没有响应。 x 的值不会像预期的那样变为 false。 想法?
【问题讨论】:
-
为什么不能从
MouseListener拨打s.RestoreScreen? -
我试过了,但是当我按下一个键时它好像根本没有注意到这个动作。它甚至不会将 x 的值更改为 false。那就是问题所在。 while 循环是否与事件监听器冲突?
标签: java loops animation event-handling listener