所以我正在试验一个小的秒表对象,我无法弄清楚它为什么不起作用。我有以下的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.");
}
}
答案 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命名约定!不这样做会让你很难阅读代码,即使对你自己也是如此:-)