很多剛搞SWT的朋友都會(huì)遇到這樣一個(gè)問題:
寫的SWT在eclipse中可以運(yùn)行,但是用命令行去執(zhí)行就會(huì)報(bào)錯(cuò)。
今天就和大家一起徹底解決這個(gè)問題。
比如我們先寫一個(gè)這樣的小程序:
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中運(yùn)行,ok,可以看到一個(gè)空白窗體。
運(yùn)行CMD,到項(xiàng)目目錄,運(yùn)行java BasicSwt,結(jié)果報(bào)錯(cuò)了:
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)
為什么?
因?yàn)槲覀內(nèi)鄙龠\(yùn)行SWT需要的類庫和相關(guān)DLL鏈接庫
首先我們先下載一個(gè)文件:
到http://download.eclipse.org/eclipse/downloads/drops/R-3.2.2-200702121330/
下載swt-3.2.2-win32-win32-x86.zip
解壓縮,主要到里面的兩個(gè)文件:
swt.jar
swt-win32-3236.dll
本例中,我們先把這兩個(gè)文件放到H:\
然后把我們執(zhí)行:java -classpath h:\swt.jar BasicSwt
這時(shí)候可以看到出錯(cuò)信息變了Exception in thread "main" java.lang.NoClassDefFoundError: BasicSwt
ok,再改,執(zhí)行:java -classpath h:\swt.jar; -Djava.library.path=h:\ BasicSwt
ok,正常啦。。。。。。。。。。。。。。。。。。。。。
稍微解釋下-Djava.library.path=h:\
這里指定的是swt-win32-3236.dll存放的路徑