· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [访谈] 网银安全系列访谈之:惊心动魄网银故事
· [热点专题] 网银安全系列 3G上网卡巡礼
· [订阅IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 跨站脚本十二问 四步防范Conficker
· [热点] Windows 7 RC版公开下载 憾缺中文版

Eclipse中 SWT 的开发和打包发布

发布时间:2007.08.13 06:24     来源:赛迪网    作者:dxaw

1、SWT程序的开发

用eclipse开发SWT程序需要用到org.eclipse.swt包中的类,所以在构建路径中要把org.eclipse.swt_3.x.x.jar加进去。

小程序代码如下:

package com.plugins;
 
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
 
public class SWTtest {
 /**
  * @param args
  */
 public static void main(String[] args) {
  Display display = new Display();
  Shell shell = new Shell(display);
  shell.setLayout(new RowLayout());
  initshell(shell);
  shell.pack();
  shell.open();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch()) {
    display.sleep();
   }
  }
  display.dispose();
 }
 public static void initshell(Shell shell) {
  GridLayout gShellLay = new GridLayout();
  shell.setLayout(gShellLay);
  Composite panel = new Composite(shell, SWT.NONE);
  GridData gPanelData = new GridData(GridData.GRAB_HORIZONTAL,
    GridData.GRAB_VERTICAL, true, true);
  panel.setLayoutData(gPanelData);
  GridLayout gPanelLay = new GridLayout();
  panel.setLayout(gPanelLay);
  final Color bkcolor = new Color(Display.getCurrent(), 200, 0, 200);
  panel.setBackground(bkcolor);
  final Text text = new Text(panel, SWT.MULTI / SWT.WRAP);
  GridData gTextData = new GridData(GridData.GRAB_HORIZONTAL,
    GridData.GRAB_VERTICAL, true, true);
  text.setLayoutData(gTextData);
  Button butt = new Button(panel, SWT.PUSH);
  butt.setText("PUSH");
  butt.addMouseListener(new MouseAdapter() {
   public void mouseDown(MouseEvent e) {
    text.setText("Hello,SWT");
   }
  });
  shell.addDisposeListener(new DisposeListener() {
   public void widgetDisposed(DisposeEvent e) {
    bkcolor.dispose();
   }
  });
 }
}

实现的是一个按钮和文本框显示,点击按钮在文本框中显示内容。

但是运行时仍然会抛出java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.path异常,这是因为SWT使用的JNI技术需要通过dll提供的接口访问windows本地API,我们需要使java程序在启动的时候即能够访问它们,你可以有多种办法实现这个目的:

a>最简单的办法就是直接把这几个文件拷贝到你jdk的bin目录下。

b>你也可以设定环境变量,在PATH中加入这几个dll文件的目录。

c>你还可以在运行程序的时候指定java.library.path为这几个dll所在的目录,在eclipse中,如果你打开Help菜单中About Eclipse Platform,然后在出现的对话框中选择configuration details按钮,你可以在接下来出现的对话框中找到java.library.path。

配置java.library.path你还有另外一种办法,就是在运行程序的时候,从Run菜单中选择Run As..而不是Run As Java Application,填写好必要的其他参数以后打开Argument选项卡,然后在VM Argument输入框中填写该参数为dll文件的路径:-Djava.library.path=E:\EJBTEST\test\lib(我的dll文件都在该目录下)。

通过以上工作,你就可以编写和运行SWT程序了。

2、SWT程序的打包

程序开发好之后,要把程序发布成独立的可执行文件,要先导出成jar文件:具体导出步骤就不说了,第一次

导出时选生成清单文件,然后提取导出的清单文件MANIFEST.MF;修改清单文件内容为:

Manifest-Version: 1.0

Class-Path: ./lib/org.eclipse.core.runtime_3.2.0.v20060603.jar

./lib/org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar

Main-Class: com.plugins.SWTtest(注意":"后面都有一个空格);然后再一次将程序导出jar文件,这次选择修改后的清单文件。

在导出目录新建lib目录,将org.eclipse.core.runtime_3.2.0.v20060603.jar和

org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar两个包考到lib目录下,并将

org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar中的swt-win32-3236.dll解压到导出目录中;将导出的jar文件用javaw运行,程序正常执行,大功告成。

(责任编辑:龚勋)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java 能扮演嵌入式应用开发的主角吗? (08-10) · 从数据库中读出图片并且显示的示例代码 (08-09)
· 图解exe4j一步步生成exe执行文件的方法 (08-09) · 使用 MOCK 对象进行单元测试的实例讲解 (08-09)
· 精典文萃:Java编程中异常处理的优劣观 (08-09) · 用Java来监视系统进程的解决方案 (08-08)
· 使用Java程序实现随机验证码功能的实例 (08-08) · 使用links方式来安装Eclipse插件 (08-07)
· 使用Java来实现编辑器的Undo Redo功能 (08-07) · Java新手学堂:Acegi框架技术详细介绍 (08-07)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
2009第七届中国电脑商年会直播
·创业投资系列访谈:产业..
·特别策划:视频网站系列..
·专题:网游虚拟货币新规..
专题:6月上市手机新品回顾及7月新机展望
·2009年中国电信业信息化..
·专题:把iPhone 3GS“解..
·WAPI重启国际标准进程 ..
专题:09年中盘点-联想春季打印机新品回顾
·InfoComm 2009 视听与集..
·网游背后的故事 网游服..
·[专题]联想ThinkPad T40..
BizSpark:微软为技术创业企业点燃火花
·社区活动:我的IT求知生..
·访谈:内网安全2009系列..
·安全访谈:网银安全之Sa..