EventQueue.invokeLater(new Runnable()
{
public void run()
{
ZipTestFrame frame = new ZipTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
答案 0 :(得分:9)
该代码创建一个实现runnable的匿名类的实例。该对象作为参数传递给EventQueue.invokeLater,稍后将调用它(意味着它将在稍后的某个时间点调用该对象上的run方法)。
您不需要变量指向对象,因为您只在该实例中使用该对象。方法invokeLater确实有一个指向对象的局部变量(假定对象作为参数传递,参数是局部变量),它用于将对象存储在事件队列中,现在也引用该对象,直到对象被调用并从队列中删除,此时它可以进行垃圾收集。
附录:
简单事件队列的原始示例:
class MyEventQueue {
Queue<Runnable> queue = new LinkedList<Runnable>();
public void invokeLater(Runnable r) {
queue.add(r);
}
public boolean hasNext() {
return !queue.isEmpty();
}
public void processNext() {
queue.poll.run();
}
}
答案 1 :(得分:0)
以下是事件的样子:
class Event {
Runnable RunnableObject;
public void invokeLater(Runnable runner) {
RunnableObject = runner;
}
/* background thread */
public void thread() {
while ( condition ) {
if ( itsLater ) {
RunnableObject->run();
}
}
}
}
在Event外观后面运行一个异步方法,它将传递给invokeLater的匿名对象并调用其run()方法。该对象仍然存在,它有一个定义 - 但它没有可用于随后询问它的引用,除非你使用run()方法将this指针传递给其他东西。