Java while循环是否可以等待事件继续
我有一个hangman引擎,它使用JOptionPane让用户猜测,但现在我正在实现一个带有文本字段的GUI,我需要一种方法来停止引擎,让用户从文本字段中猜测-我正在尝试使用MVC,因此在文本字段中的数据被发送到main/controller类的那一刻,但是在数据加载到main类中的变量中之后-我开始难以将该数据集成到引擎中 我不知道给引擎增加一个等待是否是最好的办法,但这就是我真正能想到的 这是我的发动机等级:Java while循环是否可以等待事件继续,java,wait,Java,Wait,我有一个hangman引擎,它使用JOptionPane让用户猜测,但现在我正在实现一个带有文本字段的GUI,我需要一种方法来停止引擎,让用户从文本字段中猜测-我正在尝试使用MVC,因此在文本字段中的数据被发送到main/controller类的那一刻,但是在数据加载到main类中的变量中之后-我开始难以将该数据集成到引擎中 我不知道给引擎增加一个等待是否是最好的办法,但这就是我真正能想到的 这是我的发动机等级: public class engine { char [] charda
public class engine {
char [] charda = new char[20];
char [] charwo = new char[20];
Highscore words = new Highscore();
main mn = new main();
int guesses =7;
char guess;
public engine() {
}
public void enginer(){
int count = 0;
String word = words.getWord();
for (int i = 0; i<word.length(); i++)
{
//instantiates two arrays one of dahses and one with the word
charwo[count] = word.charAt(i);
charda[count]= '_';
count++;
}
for (int l=0; l<count; l++)
{
System.out.print(" "+charda[l]);
}
while (guesses != 0 && !Arrays.equals(charwo, charda))
{
System.out.println("");
guess = JOptionPane.showInputDialog("enter a Guess").charAt(0);
if (word.toUpperCase().contains(String.valueOf(guess).toUpperCase()))
{
for (int k = 0; k<word.length(); k++)
{
if (String.valueOf(guess)
.toUpperCase()
.equals( String.valueOf(charwo[k]).toUpperCase() ))
{
charda[k]=charwo[k];
for(int l=0; l<count; l++)
{ // prints dashes here to avoid a letter being
// chopped off by the program stopping in the middle
System.out.print(" "+charda[l]);
}
}
}
}
else
{
guesses = guesses-1;
System.out.println("guesses left "+guesses);
//
//Re-displays dashes
for (int l=0; l<count; l++)
{
System.out.print(" "+charda[l]);
}
}
if (Arrays.equals(charwo, charda))
{
System.out.println("");
System.out.println("You are Winner");
}
}
}
}
我现在真的很迷茫,所以即使是朝着正确的方向点头也会很有帮助:)通常,等待可以使用
wait/notify
内置的java机制来实现
虽然你可以找到一堆教程来解释这个问题,但这里是一个非常简短的解释
java中的每个类都自动扩展定义方法wait()
和notify()
的java.lang.Object
。Wait挂起当前线程,直到对同一对象调用notify()
。用于调用wait()
和notify()
的对象称为monitor。遵循java线程管理的规则,必须从synchronized
块调用这两种方法,即
synchronized(obj) {
obj.wait();
}
现在你的问题的答案很简单。定义从这两点都可见的监视器对象(我指的是应该等待的代码和应该触发第一个线程继续的代码)
将等待实施为:
synchronized(obj) {
obj.wait();
}
当使用单击按钮时(因此您希望等待退出),您应该调用代码:
synchronized(obj) {
obj.notify();
}
就这样。请注意,有带超时的
wait
版本,还有notifyAll()
。我会花一些时间学习java线程、同步等。这很有趣。祝你好运 通常,可以使用wait/notify
内置java机制来实现等待
虽然你可以找到一堆教程来解释这个问题,但这里是一个非常简短的解释
java中的每个类都自动扩展定义方法wait()
和notify()
的java.lang.Object
。Wait挂起当前线程,直到对同一对象调用notify()
。用于调用wait()
和notify()
的对象称为monitor。遵循java线程管理的规则,必须从synchronized
块调用这两种方法,即
synchronized(obj) {
obj.wait();
}
现在你的问题的答案很简单。定义从这两点都可见的监视器对象(我指的是应该等待的代码和应该触发第一个线程继续的代码)
将等待实施为:
synchronized(obj) {
obj.wait();
}
当使用单击按钮时(因此您希望等待退出),您应该调用代码:
synchronized(obj) {
obj.notify();
}
就这样。请注意,有带超时的
wait
版本,还有notifyAll()
。我会花一些时间学习java线程、同步等。这很有趣。祝你好运 请参阅观察者和侦听器设计模式。这就是您需要的。请参阅观察者和侦听器设计模式。这就是你需要的。哇,太好了,我一定会深入研究这个。我对一件事感到困惑,如果对象被告知等待,那么程序如何继续,因为等待将迫使两个锁等待,因此如果另一个锁正在等待,它将如何通知?哇,太好了,我肯定会深入研究这一点。我对一件事感到困惑,如果对象被告知等待,那么程序如何继续,因为等待将迫使两个锁等待。因此,如果另一个锁正在等待,它将如何通知?