随笔 - 119  文章 - 3173  trackbacks - 0
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

交友莫独酒,茅台西凤游。
口干古井贡,心徜洋河流。
称多情杜康,趟无量双沟。
赞中华巍巍,无此不销愁。

常用链接

留言簿(68)

随笔分类(136)

随笔档案(122)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 522470
  • 排名 - 94

最新评论

很多刚搞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(500375);
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 交口称赞 阅读(3385) 评论(4)  编辑  收藏 所属分类: Eclipse RCP SWT

FeedBack:
# re: 彻底解决SWT运行出错(1)命令行方式 2007-08-18 17:10 MilC
真的让人感谢得痛哭流涕啊  在此谢过  回复  更多评论
  
# re: 彻底解决SWT运行出错(1)命令行方式 2007-08-18 21:44 交口称赞
不客气,有用就好  回复  更多评论
  
# re: 彻底解决SWT运行出错(1)命令行方式 2010-01-04 13:51 alanling
为什么我还是不行,完全一样的操作  回复  更多评论
  
# 感谢 2011-05-21 10:27 java_me
谢谢谢谢谢,纠结了好几天的问题在你清晰的说明下终于解决了。原来之前少了一个分号。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问