很多刚搞SWT的朋友都会遇到这样一个问题:
写的SWT在eclipse中可以运行,但是用命令行去执行就会报错。
今天就和大家一起彻底解决这个问题。
比如我们先写一个这样的小程序:
1 import org.eclipse.swt.SWT;
2 import org.eclipse.swt.widgets.Display;
3 import org.eclipse.swt.widgets.Shell;
4
5
6 public class BasicSwt extends Shell {
7
8 /**
9 * Launch the application
10 * @param args
11 */
12 public static void main(String args[]) {
13 try {
14 Display display = Display.getDefault();
15 BasicSwt shell = new BasicSwt(display, SWT.SHELL_TRIM);
16 shell.open();
17 shell.layout();
18 while (!shell.isDisposed()) {
19 if (!display.readAndDispatch())
20 display.sleep();
21 }
22 } catch (Exception e) {
23 e.printStackTrace();
24 }
25 }
26
27 /**
28 * Create the shell
29 * @param display
30 * @param style
31 */
32 public BasicSwt(Display display, int style) {
33 super(display, style);
34 createContents();
35 }
36
37 /**
38 * Create contents of the window
39 */
40 protected void createContents() {
41 setText("SWT Application");
42 setSize(500, 375);
43 //
44 }
45
46 @Override
47 protected void checkSubclass() {
48 // Disable the check that prevents subclassing of SWT components
49 }
50
51 }
52
在eclipse中运行,ok,可以看到一个空白窗体。
运行CMD,到项目目录,运行java BasicSwt,结果报错了:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Shell
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
为什么?
因为我们缺少运行SWT需要的类库和相关DLL链接库
首先我们先下载一个文件:
到http://download.eclipse.org/eclipse/downloads/drops/R-3.2.2-200702121330/
下载swt-3.2.2-win32-win32-x86.zip
解压缩,主要到里面的两个文件:
swt.jar
swt-win32-3236.dll
本例中,我们先把这两个文件放到H:\
然后把我们执行:java -classpath h:\swt.jar BasicSwt
这时候可以看到出错信息变了Exception in thread "main" java.lang.NoClassDefFoundError: BasicSwt
ok,再改,执行:java -classpath h:\swt.jar; -Djava.library.path=h:\ BasicSwt
ok,正常啦。。。。。。。。。。。。。。。。。。。。。
稍微解释下-Djava.library.path=h:\
这里指定的是swt-win32-3236.dll存放的路径
posted on 2007-04-19 10:07
交口称赞 阅读(3382)
评论(4) 编辑 收藏 所属分类:
Eclipse RCP SWT