今天我用Eclipse3.2+SwtDesigner写了一个SWT小程序(实际上大部分代码都是SwtDesigner自动生成的,我只是加了一个按钮,并写了几行事件语句。)
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class MyApp
{
/** *//**
* Launch the application
*
* @param args
*/
private static int i;
public static void main(String[] args)
{
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setText("SWT Application");
shell.open();
final Button button = new Button(shell, SWT.NONE);
button.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent arg0)
{
button.setText("白点" + (++i) + "次");
}
});
button.setText("点我");
button.setBounds(181, 105, 48, 22);
shell.layout();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
}
写完之后,我迷茫了,如何将这个SWT程序打包成可以脱离Eclispe环境运行的jar包呢?我首先查阅了《Eclipse从入门到精通》(第一版)的第273页,遗憾的是陈刚老师使用的是Eclipse3.0.1,而我使用的是Eclipse3.2,plugins目录下的jar包名称大相径庭,看来只好自力更生了,我采用的方法是照猫画虎和反复试验,功夫不负有心人,终于被我搞定了。
(1)在d:\下建立myswt目录,用来保存打包后的SWT程序,在myswt目录下建立lib目录,用来存放SWT程序需要使用的jar包。
(2)将Eclipse\plugins目录下的org.eclipse.core.runtime_3.2.0.v20060603.jar和org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar拷贝到d:\myswt\lib下。将org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar中的swt-win32-3232.dll解压到d:\myswt目录下
(3)将我上面的SWT程序利用Eclipse的导出功能导出为myswt.jar文件,导出过程略,其中的清单文件manifest.txt的内容如下:
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.0.v3232m.jar
Main-Class: MyApp
一定要注意每个":"后面都有一个空格
如果大家对导出过程不太了解,请参考《Eclipse从入门到精通》(第一版)的第274页。
(4)将myswt.jar拷贝到d:\myswt下。
(5)把myswt.jar的文件定义成用javaw来默认打开,则双击myswt.jar即可运行。