我在理解Java中的接口/监听器时显然遇到了问题。 (红色的Java新手警报)。 使用https://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html和接口示例,我从timer.stop获取我不理解的行为,和/或从计时器中删除actionlisteners(即,触发'tick')。 无论我做什么,我都无法在使用界面等时停止计时器 - 我只能让它在本地课程中使用=意大利面条代码。
public void actionPerformed(ActionEvent e) {
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
JButton clicked= (JButton) e.getSource();
ClockLabel mainsClockList= new ClockLabel(mainsLab);
if (clicked==clock1But) {
///////// Clock not started
if (mainsRunning==false) {
//mainsClockList = new ClockLabel(mainsLab); // that starts
// it, wait for FB in listnr
mainsClockList.setStopWatchListener(new StopWatchListener() {
public void clockCount(long count) {
System.out.println("Clock fired"); // fired every
//click- should only be on attach
// multiple calls button or EL?
mainsLab.setText(sdf.format(count));
}
});
clock1But.setText("Stop");
mainsRunning=true;
}
//// clock already started
else if (mainsRunning== true) {
System.out.println("in butt pressed already run");
mainsClockList.stopClock();
mainsClockList.setEnabled(false);
mainsRunning=false;
}
}
else if (clicked==clock2But) {
System.out.println("Got 2nd but"); }
else if (clicked==clock3But) {
System.out.println("Got 3rd but"); }
}
Clock Lab课程: -
public ClockLabel(JLabel labIn) {
sdf = new SimpleDateFormat("mm:ss");
t= new Timer(500, this );
t.start();
}
public void actionPerformed(ActionEvent e) {
// this is listener for t....
Date d= new Date();
long diff= d.getTime() -cStarted.getTime();
swListener.clockCount(diff);
}
public void stopClock() {
System.out.println("In CL, called stopclock");
t.stop(); // no effect
swListener= null; // no effect
System.out.println("swListener := null");
// swListener.wait(5000); null pointer on try catch so
//has killed sw....!
}
public void setStopWatchListener(StopWatchListener listener) {
this.swListener= listener;
}
}
Interface
public interface StopWatchListener {
public void clockCount(long count);
}
我尝试尽量减少代码,但请继续提供帮助。感谢任何指针,非常感谢。 系统输出如下,只需单击1按钮即可开始,一个停止:
时钟已解雇 时钟被解雇 时钟被解雇 时钟被解雇 在对接已按下已经运行 在CL中,称为stopclock swListener:= null 时钟被解雇 时钟被解雇 时钟被解雇 时钟被解雇