SWT 在外观和性能上都超过了 awt/swing ,为什么这样说呢?下面简单的测试程序会让你一目了然。废话也不多说,让我们看程序。
下面让我们写一个简单的程序来测试一下,程序只做一件事,就是用 Label 显示 ”Hello World!” ,我的测试环境是 JDK1.5.0+Eclipse3.1 。看看在 AWT 、 SWING 和 SWT 下分别实现该效果所需要的时间和内存消耗。
AWT_CODE:
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class awtTest {
public static void main(String[] args) {
long memory = 0L;
long time = 0L;
memory = Runtime.getRuntime().freeMemory();
time = System.currentTimeMillis();
Frame frame = new Frame();
Label label = new Label();
label.setText("Hello World!");
frame.add(label);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
frame.pack();
System.out.println(System.currentTimeMillis() - time);
System.out.println(memory - Runtime.getRuntime().freeMemory());
}
}
运行效果及所用的时间和内存值:
SWING_CODE:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class swingTest {
public static void main(String[] args) {
long memory = 0L;
long time = 0L;
memory = Runtime.getRuntime().freeMemory();
time = System.currentTimeMillis();
JFrame frame = new JFrame();
JLabel label = new JLabel();
label.setText("Hello World!");
frame.add(label);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
frame.pack();
System.out.print("Time:");
System.out.println(System.currentTimeMillis() - time);
System.out.print("Memory:");
System.out.println(memory - Runtime.getRuntime().freeMemory());
}
}
运行效果及所用的时间和内存值:
SWT_CODE:
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
public class swtTest {
public static void main(String[] args) {
long memory = 0L;
long time = 0L;
memory = Runtime.getRuntime().freeMemory();
time = System.currentTimeMillis();
Display display = new Display();
Shell shell = new Shell(display);
Label label = new Label(shell, SWT.NONE);
label.setText("Hello World!");
shell.pack();
label.pack();
shell.open();
System.out.print("Time:");
System.out.println(System.currentTimeMillis() - time);
System.out.print("Memory:");
System.out.println(Runtime.getRuntime().freeMemory() - memory);
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
label.dispose();
}
}
运行效果及所用的时间和内存值:
如果你仔细看代码,你会发现在 SWT 的代码中,我注解为 ’***’ 代码处,与前两者有所不同,这也我疑惑的地方,在整个程序运行中,运行后的剩余内存居然比运行前的剩余内存值大。接着,我在调试该程序的时候,我发现在 Shell shell = new Shell(display) 语句执行后,内存值有明显的增加,如果你知道 SWT 底层是如何操作的,知道这是什么原因引起的,请你 联系我 并告诉我这是为什么,我好做出修正。
如果你是初学者,不知道怎么运行 SWT 程序,其实很简单的,只需要在你的工程的 Libraries 添加一个名为 org.eclipse.swt.win32.win32.x86_3.1.0.jar 包,该包的位置在你的 Eclipse 的安装目录下的 /plugins/ 文件夹里。