我正在制作一款平台游戏,让玩家每 30 毫秒跳跃一次,并向上添加少量的力。我想我应该使用多线程,因为我之前已经做过一些,而且看起来很简单。无论如何,我尝试了这个:
public void jump() {
new Runnable() {
public void run() {
for (int i = 0; i <= jumpForce; i++) {
velocity.y++;
System.out.println("Adding force");
try {
wait(30);
} catch (InterruptedException e) {}
}
}
}.run();
}
现在,我认为这会做的是从0到jumpForce(在本例中为50)的每个循环,它在y速度变量上加1,然后等待30ms,但实际发生的是我收到一个名为:
的错误java.lang.IllegalMonitorStateException
我不知道这意味着什么,所以有人可以告诉我我做错了什么吗?
最佳答案
如果您想在不同的线程中执行此代码,那么您不应该不调用 Runnable 的 run()
方法。您应该做的是创建线程的实例并将 Runnable 实现放入其构造函数中。
然后调用.start()
。
public void jump() {
new Thread(new Runnable() {
public void run() {
for (int i = 0; i <= jumpForce; i++) {
velocity.y++;
System.out.println("Adding force");
try {
Thread.sleep(30);
} catch (InterruptedException e) {}
}
}
}).start();
}
此外,在这种情况下,您应该sleep()
线程而不是wait()
,因为您尚未获取对象锁。为了使用 wait() 实现您需要的功能,jump()
方法必须synchronized
并且另一个线程必须调用它。
关于java - (可能)非常简单的Java多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420183/