需要帮助获得简单的停止观察工作?

时间:2011-05-01 06:44:36

标签: java swing timer

所以我正在试验一个小的秒表对象,我无法弄清楚它为什么不起作用。我有以下的gui; timeinfield是一个jtextfield,用户输入时钟的开始时间。 timerfield是一个jtextfield,其中显示时钟的时钟。 startbutton是一个jbutton,用户点击它来启动时钟。 stopbutton是一个jbutton,用户点击它来停止时钟。

现在,timerfield只显示Running:0秒。 没有其他事情发生,也许我做错了,因为这是我第一次尝试这样的事情。我即将开始学习如何使用线程,所以我认为这可能有助于我开始。

  private void startbuttonActionPerformed(java.awt.event.ActionEvent evt) {

        String starttim = timeinfield.getText();
        long startTime = Long.valueOf(starttim);
        boolean running = false;
        Timer timer = null;

        long time = (System.currentTimeMillis() - startTime)/1000;

        timerfield.setText("Running:" + time + "seconds");
        if (running==false) {
           running = true;
           timerfield.setText("Running: 0 seconds");
        }
        if (stopbutton.isSelected()) {
            timer.stop();
            running = false;
            long endTime = evt.getWhen();
            double seconds = (endTime - startTime)/1000.0;
            timerfield.setText("Time: " + seconds + "sec.");
        }
}

3 个答案:

答案 0 :(得分:2)

它仅显示“正在运行:0秒”,因为在timerfield.setText("Running: 0 seconds");之后您永远不会更新GUI。

此外,当timer为null时,您尝试执行timer.stop();,这将导致NullPointerException。

还有一件事:每次单击按钮时运行都将为false,因为它是一个局部变量,并且每次都初始化为false。如果您希望它是永久性的,请将其移出方法,并在外部初始化。

答案 1 :(得分:1)

您永远不会启动实际执行更新字段的计时器。

答案 2 :(得分:-1)

您的代码存在一些问题,有些已经发现:-)所有这些都有一个共同的原因:

你似乎对你正在做的事情没有很好的理解; - )

我的建议是采取任何成功事业的第一步:仔细阅读教科书/教程的相关章节在Swing阅读的上下文中,Snoracle的在线教程是必须< / em>对于学习使用计时器的相关章节是

http://download.oracle.com/javase/tutorial/uiswing/misc/timer.html

下一步是将您学到的知识应用到您的上下文中,从简单开始(f.i省略键入开始时间的能力)并识别您需要的部分并将单独的部分分开!提示:您需要3个actionListeners。只有当您运行一个简单的示例时,才会逐个添加复杂性。冲洗,重复......

哦......学习并坚持使用java命名约定!不这样做会让你很难阅读代码,即使对你自己也是如此:-)