我试图理解为什么这个程序不起作用。我正确使用actionlistener为什么它没有显示从线程运行开始但线程没有运行的时间,我在屏幕上看不到任何内容。 我做错了什么,或者这是使用ActionListener类的错误方法 或者我没有正确使用它,这里是所有文件的代码。
import java.awt.event.*;
import java.util.TooManyListenersException;
public class Timer extends Thread {
private int iTime = 0;
private ActionListener itsListener = null;
public Timer() {
super(); // allocates a new thread object
iTime = 0; // on creation of this object set the time to zero
itsListener = null; // on creation of this object set the actionlistener
// object to null reference
}
public synchronized void resetTime() {
iTime = 0;
}
public void addActionListener(ActionListener event) throws TooManyListenersException {
if (event == null)
itsListener = event;
else
throw new TooManyListenersException();
}
public void removeActionListener(ActionListener event) {
if (itsListener == event)
itsListener = null;
}
public void run() {
while (true) {
try {
this.sleep(100);
}
catch (InterruptedException exception) {
// do nothing
}
iTime++;
if (itsListener != null) {
String timeString = new String(new Integer(iTime).toString());
ActionEvent theEvent = new ActionEvent(this,
ActionEvent.ACTION_PERFORMED, timeString);
itsListener.actionPerformed(theEvent);
}
}
}
}
下一个文件
import java.awt.event.*;
import java.util.TooManyListenersException;
public class TextTimeDemonStration extends Object implements ActionListener {
private Timer aTimer = null; // null reference for this object
public TextTimeDemonStration() {
super();
aTimer = new Timer();
try {
aTimer.addActionListener(this);
}
catch (TooManyListenersException exception) {
// do nothing
}
aTimer.start();
}
public void actionPerformed(ActionEvent e) {
String theCommand = e.getActionCommand();
int timeElapsed = Integer.parseInt(theCommand, 10);
if (timeElapsed < 10) {
System.out.println(timeElapsed);
}
else
System.exit(0);
}
}
从
运行程序的主类的最后一个文件public class MainTest {
public static void main(String[] args) {
TextTimeDemonStration test = new TextTimeDemonStration();
}
}
答案 0 :(得分:0)
在TextTimeDemonStration
课程中,您调用了aTimer.addActionListener(this);
来指定一个动作侦听器
但是在您的Timer.addActionListener()
方法中,在if else
区块中,您编写了
if (event == null)
itsListener = event;
else
throw new TooManyListenersException();
由于this
不为null,它将抛出将被捕获的TooManyListenersException
异常。
之后启动计时器。但是,由于itsListener
在初始化后为空,因此在Timer.run()
方法中,永远不会执行if
块。因此,什么也没做。
修复Timer.addActionListener()
方法的逻辑,它应该可以正常工作。
希望这有帮助。