Java while循环是否可以等待事件继续

Java while循环是否可以等待事件继续,java,wait,Java,Wait,我有一个hangman引擎,它使用JOptionPane让用户猜测,但现在我正在实现一个带有文本字段的GUI,我需要一种方法来停止引擎,让用户从文本字段中猜测-我正在尝试使用MVC,因此在文本字段中的数据被发送到main/controller类的那一刻,但是在数据加载到main类中的变量中之后-我开始难以将该数据集成到引擎中 我不知道给引擎增加一个等待是否是最好的办法,但这就是我真正能想到的 这是我的发动机等级: public class engine { char [] charda

我有一个hangman引擎,它使用JOptionPane让用户猜测,但现在我正在实现一个带有文本字段的GUI,我需要一种方法来停止引擎,让用户从文本字段中猜测-我正在尝试使用MVC,因此在文本字段中的数据被发送到main/controller类的那一刻,但是在数据加载到main类中的变量中之后-我开始难以将该数据集成到引擎中

我不知道给引擎增加一个等待是否是最好的办法,但这就是我真正能想到的

这是我的发动机等级:

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线程、同步等。这很有趣。祝你好运

请参阅观察者和侦听器设计模式。这就是您需要的。请参阅观察者和侦听器设计模式。这就是你需要的。哇,太好了,我一定会深入研究这个。我对一件事感到困惑,如果对象被告知等待,那么程序如何继续,因为等待将迫使两个锁等待,因此如果另一个锁正在等待,它将如何通知?哇,太好了,我肯定会深入研究这一点。我对一件事感到困惑,如果对象被告知等待,那么程序如何继续,因为等待将迫使两个锁等待。因此,如果另一个锁正在等待,它将如何通知?