我正在研究Java Swing,并且与我正在阅读的这个简单的代码教程有一些疑问:
package com.andrea.execute;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/* An istance of a SimpleExample class is a JFrame object: a top level container */
public class SimpleExample extends JFrame {
/* Create a new SimpleExample object (that is a JFrame object) and set some property */
public SimpleExample() {
setTitle("Simple example");
setSize(300, 200);
setLocationRelativeTo(null); // Center the window on the screen.
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
}
}
逻辑非常简单:我有一个SimpleExample类,该类继承自JFrame Swing类。因此,SimpleExample将是顶级容器。
该类还包含main()方法,现在我有2个疑问:
1)为什么在main()方法中执行以下代码:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
它在SwingUtilities类上调用invokeLater()方法,并向其传递一个新的Runnable对象。
阅读文档,我知道这是将应用程序放置在Swing事件队列中的一种方法。它用于确保所有UI更新都是并发安全的。
我有一些问题要理解的是它是如何实现的。
在invokeLater()方法的输入参数内,它传递了这个“东西”:
new Runnable() {
@Override
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
});
这是什么东西?什么代表?以及它是如何工作的?
特纳克斯
安德里亚
这是一个实现Runnable接口的匿名类。
您可以在没有匿名类的情况下使用它:
class SimpleExample extends JFrame {
public SimpleExample() {
setTitle("Simple example");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new App());
}
}
class App implements Runnable {
public void run() {
SimpleExample ex = new SimpleExample();
ex.setVisible(true);
}
}
但是匿名类更方便。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句