如果检查线程java中断

时间:2017-06-16 03:15:06

标签: java multithreading if-statement break

我的程序是用Java编写的。我在run()方法中检查了IF()(在一个Thread中)。在IF检查中,如果条件满足,则会显示一个Window对话框(使用JOptionPane.showMessageDialog)和OK按钮。然而,它无限展示。当我单击“确定”时,它会一次又一次弹出。如何在用户单击“确定”后结束if检查。或者当条件满足时,它只显示一次?

这是我的方法()

public void danhHoiWumpus()
{
    if ((GameScreen.bg[x[0] + 1][y[0]] == 2) || (GameScreen.bg[x[0] + 2][y[0]] == 2) || (GameScreen.bg[x[0] + 3][y[0]] == 2) || (GameScreen.bg[x[0]][y[0]+1] == 2) || (GameScreen.bg[x[0]][y[0]+2] == 2) || (GameScreen.bg[x[0]][y[0]+3] == 2))
    {
        JOptionPane.showMessageDialog(this, "Có mùi wumpus  ! \n Bạn được học bổng 40%");

    }
}

这是我的run()方法

    public void run()
    {
        while(true)
        {
            hunter.update();
            hunter.danhHoiWumpus();

//            i++;
            repaint();
//            System.out.println("Gia tri cua y la " +i);
            try {
                thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

这个行动的想法是。当RED广场靠近YELLOW广场时,会弹出一个对话框,我闻到了Wumpus"。当用户单击“确定”时。他们会选择射击wumpus(我稍后会这样做)。

这是我的完整源代码(供参考):

https://www.mediafire.com/?wkp6hyq32nq23mp

提前谢谢。

3 个答案:

答案 0 :(得分:0)

您的代码在无限循环中执行

while(true)

    // I am infinite

}

您正在寻找的术语是命中检测。有很多方法可以实现它。在Java中查找命中检测以获取一些指示。

但你所拥有的并不一定是错的。

while (true) // I'm not always bad!

用于很多应用程序。但是,虽然您的代码尚未完整发布,但我无法看到您从中脱颖而出的任何地方。您可能对

感兴趣
java.util.Timer

java.util.TimerTask

这两者在Java游戏开发中都有广泛的应用

答案 1 :(得分:0)

你的睡眠时间太短(20纳秒)。增加时间,否则你会很快理解它。

答案 2 :(得分:0)

如果条件很多次,你可能会触发这个。

你需要一些上升沿触发器'逻辑,以便仅在新值从false变为true时触发,而不是在其值为真时触发。

currentValue = bigLongLogicCheck;
if(!oldvalue&&currentValue) {alert()}
oldvalue = currentValue