2017-06-16 31 views
-1

我的程序使用Java编码。我有一个IF()检查run()方法(在一个线程中)。在IF检查中,如果条件满足,则使用OK按钮显示一个Window对话框(使用JOptionPane.showMessageDialog)。但是,它显示无限。当我点击确定后,它会一次又一次地弹出。如何在用户单击确定后结束if检查。或者当条件满足时,它只显示一次?如果检入线程java,则中断。

这是我的方法()

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(); 
      } 
     } 
    } 

这一行动的想法。当红色正方形靠近黄色正方形时,它会弹出一个对话框“我嗅到了沃本斯”。当用户点击确定。他们会选择拍摄这个魔兽(我会在稍后做)。

这里是我的全部源代码(仅供参考):

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

预先感谢您。

+2

你在问为什么你没有显示的代码工作不正确,这种事情对我们来说很难调试。请帮助我们 - 显示您的代码。 –

+0

谢谢,我现在将添加我的代码 – Dan

回答

0

你的代码是一个无限while循环

while(true) 

    // I am infinite 

} 

执行你正在寻找的期限为命中检测。有很多方法可以实现它。查找命中检测在Java中的一些指针。

你有什么不一定是错的。

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

用于许多应用程序。然而,虽然你的代码没有完全发布,但我没有看到任何你从这里突破的地方。你可能有兴趣在

java.util.Timer 

java.util.TimerTask 

两个那些有Java的游戏开发广泛应用

0

你的睡眠时间是太低(20纳秒)。增加时间,否则它会发生得太快以至于无法理解。

0

如果条件许多次,您可能会触发此操作。

您需要一些'上升沿触发'逻辑才能在新值从false变为true时才触发,而不是每当触发时都触发。

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