我正在使用Java进行一个小游戏项目,我遇到了一个奇怪的问题:我有一个Runnable类,并且在run()中,如果没有println,则if条件不起作用( )之前
它的工作原理如下:
public void run(){
System.out.println("Run");
while(running){
System.out.println(""); // this print is "important"
if (KeyManager.isDown(KeyManager.A)){
bulletC.addBullet(new Bullet()); //this works
}
}
}
但不是这样的:
public void run(){
System.out.println("Run");
while(running){
//System.out.println(""); //no print
if (KeyManager.isDown(KeyManager.A)){
bulletC.addBullet(new Bullet()); //this doesn't work
}
}
}
我正在使用NetBeans 8.2,我已经尝试关闭并重新打开项目,重新编译,清理,重新启动IDE,但似乎没有任何工作,想法?
所有这一切的要点是if语句在不需要print()
的情况下工作编辑: 这是调用run()的代码
@Override
public void init() {
tileMap = new TileMap(background.getWidth(), background.getHeight());
tileMap.loadMap();
player = new Player(tileMap);
bulletC = new BulletController(1);
setCamera();
Runnable runnable = this;
thread = new Thread(runnable);
thread.start(); // here
}
答案 0 :(得分:0)
感谢亨利,你是对的,你救了我! 这是线程同步问题,缺少sychronized():
@Override
public void run(){
while(running){
synchronized(bulletC){
if (KeyManager.isDown(KeyManager.A)){
bulletC.addBullet(new Bullet());
}
}
}
}
感谢您的支持!