很多剛搞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
交口稱贊 閱讀(3399)
評論(4) 編輯 收藏 所屬分類:
Eclipse RCP SWT