服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

swt与awt/swing比较

    自ibm公司提供的跨平台gui开发包swt以来,越来越多受到广大程序员的亲睐,已经有不少程序员用它开发出美观、高效、实用的桌面应用程序。这让我们更有理由去探索swt给我们带来的惊奇。

 

        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());

       }

}

运行效果及所用的时间和内存值:

swt与awt/swing比较(图一)

 

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与awt/swing比较(图二)

 

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与awt/swing比较(图三)

 

如果你仔细看代码,你会发现在swt的代码中,我注解为’***’代码处,与前两者有所不同,这也我疑惑的地方,在整个程序运行中,运行后的剩余内存居然比运行前的剩余内存值大。接着,我在调试该程序的时候,我发现在shell shell = new shell(display)语句执行后,内存值有明显的增加,如果你知道swt底层是如何操作的,知道这是什么原因引起的,请你联系我并告诉我这是为什么,我好做出修正。

 

如果你是初学者,不知道怎么运行swt程序,其实很简单的,只需要在你的工程的libraries添加一个名为org.eclipse.swt.win32.win32.x86_3.1.0.jar包,该包的位置在你的eclipse的安装目录下的/plugins/文件夹里。

扫描关注微信公众号