如果while循环中的语句不起作用,我不知道为什么

时间:2017-06-25 06:22:37

标签: java

我正在使用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
}

1 个答案:

答案 0 :(得分:0)

感谢亨利,你是对的,你救了我! 这是线程同步问题,缺少sychronized():

@Override
public void run(){
    while(running){
        synchronized(bulletC){
        if (KeyManager.isDown(KeyManager.A)){
                bulletC.addBullet(new Bullet());
            }
        }
    }
}

感谢您的支持!