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

Java不遵循代码?[重复]

柯建业
2023-03-14

这是我认为不遵循代码应该做什么的代码片段:

public void updateTimeElapsed() {
    timeElapsedLabel.setText("Time elapsed: " + ((System.nanoTime() - time) / Math.pow(10, 9)));
}

public void updateTimeElapsedIndefinitely() {
    while (true) {
        //System.out.println("Hi");
        //TODO: Why this no work?
        if (start) { System.out.println("Shoulda'"); updateTimeElapsed(); }
    }
}

如果我发表评论

System.out.println("Hi")

代码显然不起作用。如果我取消注释,它就会取消注释!

注意:只要按“s”开始游戏,启动就是真的。但是,该方法在开始时被调用,因此“hi”应该显示多次并无限期地显示,直到我按“s”键。

一张图片说一千个字,所以我给你几百张图片(视频)来解释我的意思:https://dl.dropbox.com/u/2792692/CodeWeird.ogv

https://dl.dropbox.com/u/2792692/CodeWeird.wmv

有人能告诉我这是怎么回事吗?

共有2个答案

阎宾实
2023-03-14

我认为Affe的想法也许是好的,但是我想建议你以后试着使用Timer而不是while(true)循环。至少在我看来要好得多。

汪泓
2023-03-14

看起来布尔值开始正由另一个线程更新,但您没有将其声明为易失性,因此循环从不查看更新的值。

通过添加println来“修复”它只是JVM在获取控制台打印机的本机系统对象时管理线程堆栈状态的方式的一个奇怪结果。解决办法是使启动易失性和/或在访问它时同步。

SCCE:

从不打印:

public class Testit {

    public static void main(String[] args) {
        busted t = new busted();
        t.start();
        try {
        Thread.sleep(1000L);
        } catch (Exception e) {}
        t.startUpdating();

}

    public static class busted extends Thread {

        private boolean start = false;

        public void startUpdating() {
            start = true;
        }

        @Override
        public void run() {
            updateTimeElapsedIndefinitely();
        }

        public void updateTimeElapsedIndefinitely() {
            while (true) {
                if (start) {
                    System.out.println("Hello");
                }
            }
        }
    }
}

1秒后更改为以下方式开始发送垃圾邮件Hello:

私有易失性布尔开始=false;

 类似资料:
  • 问题内容: 这是我认为不遵循应执行的代码的代码段: 如果我发表评论 该代码显然无法正常工作。如果我取消注释,那就可以了! 注意:只要按“ s”开始游戏,start就为true。但是,该方法在一开始就被调用,因此应多次无限制地显示“ hi”,直到按“ s”键为止。 图片说出一千个单词,所以我给你数百张图片(视频)来解释我的意思:https : //dl.dropbox.com/u/2792692/C

  • 我尝试使用存储触发器测试gcloud函数。gcloud函数应该调用一个公共的gcloud服务,但需要身份验证。我可以在本地执行该函数而没有任何问题。但是在gcloud上,我可以在函数日志中找到一个NoClassDefFoundError。 无法执行函数。HelloGcs java。lang.NoClassDefFoundError:io/opencensus/trace/propagation/T

  • 我定义了一个布局,以便代理根据数据库中的列表从一个矩形节点移动到另一个矩形节点。因此,例如,代理1将前往“通道”701,然后前往702,等等。 布局示例 特工们从左上角进入,沿着x走到那一行的末尾,然后向下走到底部,再向右走,参观他们途中的“车道”。 然而,我注意到一个代理的第一条车道在右下角,所以它不是沿着路径穿过然后向下,而是使用最短的距离,沿着对角线直行到拐角的车道: 软件中有什么东西我可以

  • 我们的混合应用程序使用网页视图,从android版本4.4.3开始,网页视图不呈现。该应用程序尝试加载HTTPS web视图,并仅停留在那里大约50秒,之后它抛出一个异常,类似于这个Android致命信号11(SIGSEGV)在0x636F7D89(代码=1)。怎么能追查到呢?。显然,我们沿着这条建议的道路走下去了,所以没有多大的效果。 通过我们的实验,我们确定了以下几点 最后一个HTTP请求/响

  • 问题内容: 因此,我正在尝试学习log4j2,并把头放在记录器及其级别和父母传播上。 当前,我的源层次结构运行是: 而我的CalculatorMain是: 我的log4j2.xml是 问题是将输出到控制台的root记录程序设置为。根据我对级别的理解,这意味着我的root记录器应仅输出错误日志或更低的错误日志。然后是我的 记录器,前者应仅记录错误并降低记录,而后者应记录跟踪并降低记录。因此,我的理解

  • 问题内容: 我觉得这里缺少明显的东西! 输出: 当然应该输出: 这是怎么了 问题答案: 字典未排序。如果需要依赖顺序,则需要一个OrderedDict- Python 2.7的模块中有一个,或者您可以使用多种食谱之一。