如何处理在循环(循环)中运行的程序中的事件?

时间:2016-12-07 10:27:56

标签: java event-handling

我已经处理了这几天了,现在我已经在互联网上搜索并尝试了我想到的一切,但没有任何作用。我的问题是我正在制作一个pexeso游戏,我们有一些直接来自学校的附加库或类似的东西,它允许我们绘制一些图片而不是comad行... ...(我们还没有图形)所以我的问题是我的游戏在循环中运行并等待我的点击som我正在检查条件是否点击。如果我想点击,我必须在我的代码中声明一个方法public void vyberSuradnice(int, int)

所以问题是我的游戏在循环中运行并检查是否发出了点击。但是当点击进行时,方法vyberSuradnice被执行,我在cakatNaKlik上设置了atrrbiute - false的值,因此点击进行并且可以进行一步游戏。但是由于函数是在循环中运行的,那么即使我单击并在方法vyberSuradnice中属性的值被更改,我在循环中运行的函数也不会响应该变化,所以游戏不是继续 这是点击

的方法
 public void vyberSuradnice(int paSuradnicaX, int paSuradnicaY) {
        this.riadokOdkry = (paSuradnicaY ) / 25;
        this.stlpecOdkry  = (paSuradnicaX - 10) / 25;
        if (this.riadokOdkry > this.aPocetRiadkov || this.stlpecOdkry > this.aPocetStlpcov) {
            System.out.println("Klikli ste mimo hracieho pola ");
        } else {
            this.cakatNaKlik = false;
        }
    }

这是我等待cakatNaklik的代码部分 - false值

而(uhadol){

 if (!this.cakatNaKlik) {
                if (this.pocetUhadnutych >= (this.aPocetRiadkov * this.aPocetStlpcov) / 2) {
                    uhadol = false;
                }
                this.hraciaPlocha[this.riadokOdkry][this.stlpecOdkry].setUhadnute(true);

但即使在方法vyberSuradnice中更改了值,也不会触发此条件。但是,当我做这样的事情时:

while (uhadol) {
             System.out.print(this.cakatNaKlik);   
                if (!this.cakatNaKlik) {
                    if (this.pocetUhadnutych >= (this.aPocetRiadkov * this.aPocetStlpcov) / 2) {
                        uhadol = false;
                    }
                    this.hraciaPlocha[this.riadokOdkry][this.stlpecOdkry].setUhadnute(true);

游戏的工作方式就像写变量刷新它或者其他东西......但是我在命令行上得到了无效的真假真假,这是我无法承受的......

我知道这可能是线程的危险,但这是我不能允许做的事情,我基本上是想一次做两件事。

还有其他任何事情可以刷新变量,即使没有println,代码也会有效吗?

非常感谢您的每一次帮助

2 个答案:

答案 0 :(得分:1)

感谢大家的帮助,我终于解决了。我只是试着在if条件之前先睡一觉。它只需要睡一个一毫秒,似乎刷新条件就可以了。

答案 1 :(得分:0)

试试这个:

实现ActionListener接口或扩展实现ActionListener接口的类。例如:

public class MyClass implements ActionListener {

}

将事件处理程序类的实例注册为一个或多个组件上的侦听器。例如:

someComponent.addActionListener(instanceOfMyClass);

instanceOfClass = this; //(if it is handled in the same Class)

包含在侦听器接口中实现方法的代码。例如:

public void actionPerformed(ActionEvent e) { 
    ...//code that reacts to the action... 
}

参考: https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html