Java 如何在不同的线程中使用keylistener?
我想在不同的线程中进行输入操作,我应该在run方法中写入什么?或者这是一种更好的方法Java 如何在不同的线程中使用keylistener?,java,multithreading,Java,Multithreading,我想在不同的线程中进行输入操作,我应该在run方法中写入什么?或者这是一种更好的方法 public class Player implements Runnable, KeyListener{ int speed; public Player() { speed = 0; } @Override public void run() { //what should i write here
public class Player implements Runnable, KeyListener{
int speed;
public Player()
{
speed = 0;
}
@Override
public void run()
{
//what should i write here?
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e)
{
startMove(e);
}
@Override
public void keyReleased(KeyEvent e)
{
endMove(e);
}
public void startMove(KeyEvent e)
{
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_W:
speed = 2;
break;
case KeyEvent.VK_S:
speed = -2;
break;
default:
break;
}
}
public void endMove(KeyEvent e)
{
int key = e.getKeyCode();
if(key == KeyEvent.VK_W)
speed = 0;
if(key == KeyEvent.VK_S)
speed = 0;
}
}
此代码应该检测密钥事件,然后依赖于密钥代码调用startMove()或endMove()函数。所有这些都应该在同一条线上。我是否应该在运行时使用while循环,然后以某种方式将这些函数放入其中 我认为你的设计是“颠倒”的
首先,用户界面事件总是由您自己决定
您的代码正在做什么:更改某些玩家对象的速度。哪里需要另一个线程
意思是:你应该已经使用了一些其他的“游戏控制器线程”。在该线程中运行的代码只检查speed
字段的值;并利用这一点
核心是:你的开始/结束方法只是改变了一个字段;那很好。你应该保持这种状态。并让该类之外的其他代码根据这些鼠标事件所改变的速度“做它自己的事”。除非有理由不这样做,否则应该使用
计时器而不是线程@Radiodef,但它会在主线程中,不是吗?