时间差的java

时间差的java,java,swing,user-interface,timer,joptionpane,Java,Swing,User Interface,Timer,Joptionpane,下面是我编写的示例代码,其中用户获得一个带有2个按钮的界面。当用户单击开始按钮时,计时器启动,当单击结束按钮时,计时器停止,并显示时间差。 但时间上的差异并没有被输出:( 有人能帮我吗 导入java.awt.FlowLayout; 导入java.awt.event.ActionEvent; 导入java.awt.event.ActionListener; 导入javax.swing.JButton; 导入javax.swing.JFrame; 导入javax.swing.JOptionPane;

下面是我编写的示例代码,其中用户获得一个带有2个按钮的界面。当用户单击开始按钮时,计时器启动,当单击结束按钮时,计时器停止,并显示时间差。 但时间上的差异并没有被输出:(

有人能帮我吗

导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.JTextField;
公共类Timer2扩展了JFrame{
私人按钮启动;
私有按钮端;
公共时间2(){
超级(“测试定时器”);
setLayout(新的FlowLayout());
开始=新的JButton(“开始”);
添加(开始);
结束=新的按钮(“结束”);
添加(结束);
ButtonHandler处理程序=新建ButtonHandler();
addActionListener(处理程序);
addActionListener(处理程序);
}
私有类ButtonHandler实现ActionListener{
已执行的公共无效操作(操作事件){
长s_时间=0;
长e_时间=0;
长差=0;
字符串名称=((JButton)event.getSource()).getText();
如果(名称等于(“开始”)){
s_time=System.currentTimeMillis();
}否则{
e_time=System.currentTimeMillis();
}
差异=(e_时间-s_时间)/1000;
showMessageDialog(null,diff);
}
}
公共静态void main(字符串[]args){
Timer2 Timer2=新的Timer2();
timer2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
定时器2.设置大小(200200);
timer2.setVisible(true);
}
}

您已将按钮文本用大写字母表示,但在事件处理程序中查找小写字母

您还在
actionPerformed()
方法内将
s_time
e_time
都设置为
0
,这意味着每次单击都将它们设置为
0
。这两个字段都需要是
ButtonHandler
类中的字段

此外,按照您编写的方式,当您单击任一按钮时,
JOptionPane.showMessageDialog()
将被触发


编辑:要解决最后一个问题,请移动
diff
计算和
JOptionPane.showMessageDialog()
调用到
else
中,然后阻止它;您只需要在“结束”时才需要它按钮已按下。

您已将按钮文本用大写字母表示,但在事件处理程序中查找小写字母

您还在
actionPerformed()
方法内将
s_time
e_time
都设置为
0
,这意味着每次单击都将它们设置为
0
。这两个字段都需要是
ButtonHandler
类中的字段

此外,按照您编写的方式,当您单击任一按钮时,
JOptionPane.showMessageDialog()
将被触发


编辑:若要解决上一个问题,请移动您的
diff
计算和
JOptionPane.showMessageDialog()
调用到
else
块中,然后将其阻止;您只需要在按下“end”按钮时才需要它。

我假设您只想在用户单击“end”时显示结果。按照您编写的方式,对话框将以任意方式显示。若要解决此问题,请将
JOptionPane.showMessageDialog(null,diff)
移动到
else
块中


另一件事,@Brian Roach很有帮助地解释说,计算机非常区分大小写(例如,“因此”不等于“因此”)。因此,请确保您所指的是正确的项目。

我假设您只想在用户单击“结束”时显示结果。按照您编写的方式,对话框将以任意方式显示。若要解决此问题,请将
JOptionPane.showMessageDialog(null,diff)
移动到
else
块中


另一件事,@Brian Roach很有帮助地解释说,计算机是非常区分大小写的(例如,“因此”不等于“因此”)。因此,请确保您所指的是正确的项目。

另请参见。非常确定自动装箱已经解决了这个问题,但我必须对其进行测试。如果它没有呕吐,它肯定会将
长的
转换为某个
对象
@BrianRoach不确定,但转换不会造成任何损害。@Brian Roach and@fires好的,非常感谢你的帮助。我已经修改过了,它可以工作了:)但是有一个小问题。单击“开始”按钮时,我会看到一个消息框。如何更正它。@fireshadow52-当然有;一个不必要的连接和2个
字符串
对象;)我刚刚测试了它-自动拳击可以帮你做到这一点,而且不需要。非常确定自动拳击已经解决了这个问题,但我必须测试它。如果它没有呕吐,它肯定会将
长的
转换成一些
对象
@BrianRoach不确定,但这对转换没有任何不利影响。@Brian Roach和@fireshadow52非常感谢您的帮助。我已经修改过了,它可以工作了:)但是有一个小问题。单击“开始”按钮时,我会看到一个消息框。如何更正它。@fireshadow52-当然有;一个不必要的连接和2个
字符串
对象;)我刚刚测试过它-自动拳击可以为你做到这一点,它是不需要的。