自ibm公司提供的跨平台gui开发包swt以来,越来越多受到广大程序员的亲睐,已经有不少程序员用它开发出美观、高效、实用的桌面应用程序。这让我们更有理由去探索swt给我们带来的惊奇。
swt在外观和性能上都超过了awt/swing,为什么这样说呢?下面简单的测试程序会让你一目了然。废话也不多说,让我们看程序。
下面让我们写一个简单的程序来测试一下,程序只做一件事,就是用label显示”hello world!”,我的测试环境是jdk
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 =
long time =
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 =
long time =
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 =
long time =
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_
闽公网安备 35060202000074号