当前位置: 首页 > 知识库问答 >
问题:

重新启动时循环

虞博涛
2023-03-14

我正在尝试重新启动时循环。我已经声明了布尔类型的变量保去。如果int变量x不在窗口中,保去将变为假。然后重置()方法必须保持去=真。它可以工作,但同时循环不工作。

使用reset()和checkWin()初始化:

private void reset() {
    b.x = 250;
    b.y = 100;
    b.keepRunning = true;
    a.keepGoing = true;
    System.out.println(a.keepGoing);
}

public void checkWin() {
    if (b.keepRunning) {
        if (b.getX() < -10) {
            a.score++;

            JOptionPane.showMessageDialog(okno, "Player " + p.getScore()
                    + " - Computer " + a.getScore(), "Oh, well...",
                    JOptionPane.INFORMATION_MESSAGE);
            b.keepRunning = false;
            a.keepGoing = false;
            System.out.println(a.keepGoing);
            reset();
        } else if (b.getX() > 599) {
            p.score++;
            JOptionPane.showMessageDialog(okno, "Player " + p.getScore()
                    + " - Computer " + a.getScore(), "Good!",
                    JOptionPane.INFORMATION_MESSAGE);
            b.keepRunning = false;
            a.keepGoing = false;
            System.out.println(a.keepGoing);
            reset();
        }
    }
}

第二类带有线程、保持和时循环:

Runnable intel = new Runnable() {
    public void run() {
        while (keepGoing) {
            while (getY() < board.ball.getY()) {
                System.out.println(keepGoing + " " + getY());
                try {
                    if (y == 220) {
                    } else {
                        y += 1;
                        Thread.sleep(10);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            while (getY() > board.ball.getY()) {
                System.out.println(keepGoing + " " + getY());
                try {
                    if (y == 0) {
                    } else {
                        y -= 1;
                        Thread.sleep(10);
                    }
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
};

共有2个答案

洪高扬
2023-03-14

如果从不同的线程访问keepGoing标志(我认为您的示例正在显示,它不清楚),那么您需要使用同步来确保在reset()方法中更新keepGoing标志时,它对runnable中的线程可见。您可能想查看原子布尔类。

见有效Java,第#66项

钱志义
2023-03-14

使用关键字继续转到循环的下一次迭代。例如:

while(true)
{
   // ...

   if(!condition) continue; // this will go to the beginning of the while loop.

   // ...
}
 类似资料:
  • 问题内容: 我有: 但这似乎不起作用。有没有办法重新启动循环? 谢谢 问题答案: 您可能要考虑使用适用于该逻辑的其他类型的循环,因为这是最明显的答案。 也许一个:

  • 我有一个单身演员的等级制度。父母监督和协调孩子。当重新启动协调器时,我需要保持子角色运行。有没有一种方法可以防止子角色在其父角色重新启动时重新启动,或者我应该重新考虑我的角色层次结构?我一直在研究akka的监管策略,但找不到明确的答案。

  • 我有一个临时作业,通过KafkaSource被配置为收听主题的正则表达式,类似于: Kafka Consumers Start Position配置设置为startFromLatest,如下所示: 我们通过配置传递topicPattern,有时一个新的Kafka制作人会生成数据,比如说,然后我们通过添加这个新主题来更新配置,并使用保存点重新启动作业。 在本例中,我们注意到Kafka资料从一开始就阅

  • 我有一个docker撰写yml文件,定义了几个容器: 数据库 网络服务 我在“web服务”中定义了“依赖于”,在“数据库”之后开始。这两个容器都定义为“始终重新启动”。 我一直在谷歌上搜索,在系统重启时找不到关于容器启动顺序的清晰信息。docker守护进程是否读取docker compose yml文件并启动数据库,然后启动web服务?或者它是如何工作的?

  • 问题内容: 我正在使用CSS着色器+动画。我的着色器类定义如下: 我正在尝试使用jQuery通过和动态设置/取消设置样式(shader + animation) 但是,奇怪的是,当我重置类时(例如,在removeClass之后调用addClass),仅重新应用了着色器,而没有应用动画(我已钩住AnimationStart事件以查看动画何时开始)。有人知道为什么会这样吗,我该如何解决? 编辑:我在这

  • 我尝试使用mongodb插件作为logstash的输入。以下是我的简单配置: 但是我面临一个“循环问题”,可能是由于一个字段“时间戳”,但我不知道该怎么办。 [2018-04-25T12:01:35998][WARN][logstash.inputs.mongodb]mongodb Input引发异常,重新启动{:exception= 还有一个调试日志: [2018-04-25T12:01:34.