首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

彻底解决SWT运作出错(2)修改系统环境变量

2012-12-21 
彻底解决SWT运行出错(2)修改系统环境变量很多刚搞SWT的朋友都会遇到这样一个问题:写的SWT在eclipse中可以

彻底解决SWT运行出错(2)修改系统环境变量

很多刚搞SWT的朋友都会遇到这样一个问题:
写的SWT在eclipse中可以运行,但是用命令行去执行就会报错。
今天就和大家一起彻底解决这个问题。

比如我们先写一个这样的小程序:

?

import org.eclipse.swt.SWT;? import org.eclipse.swt.widgets.Display;? import org.eclipse.swt.widgets.Shell;? ? ? public class BasicSwt extends Shell {? ????? /**?????? * Launch the application????? * @param args????? */???? public static void main(String args[]) {???????? try {???????????? Display display = Display.getDefault();???????????? BasicSwt shell = new BasicSwt(display, SWT.SHELL_TRIM);???????????? shell.open();???????????? shell.layout();???????????? while (!shell.isDisposed()) {???????????????? if (!display.readAndDispatch())???????????????????? display.sleep();???????????? }???????? } catch (Exception e) {???????????? e.printStackTrace();???????? }???? }????? /**????? * Create the shell????? * @param display????? * @param style????? */???? public BasicSwt(Display display, int style) {???????? super(display, style);???????? createContents();???? }????? /**????? * Create contents of the window????? */???? protected void createContents() {???????? setText("SWT Application");???????? setSize(500, 375);???????? //???? }????? @Override???? protected void checkSubclass() {???????? // Disable the check that prevents subclassing of SWT components???? }??}

在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存放的路径

?

上面的介绍比较适合程序发布和给客户使用的时候,那么我们自己开发的时候老是这么用也不方便,

下面我们彻底解决这个问题:

?swt-awt-win32-3236.dll
?swt-gdip-win32-3236.dll
?swt-wgl-win32-3236.dll
?swt-win32-3236.dll
全部拷贝到\Windows\System32下面


修改系统环境变量:
classpath=.;d:\JAVA6\lib\tools.jar;d:\JAVA6\lib\dt.jar;d:\JAVA6\bin;h:\swt.jar;

解释一下:
“.”是指当前目录
“d:\JAVA6\lib\tools.jar;d:\JAVA6\lib\dt.jar;d:\JAVA6\bin;”是为了JAVA6配置的
“h:\swt.jar;”是咱们SWT.JAR的路径

关掉CMD,重新打开,不然CMD不会重新加载环境变量。


到项目目录,运行java BasicSwt

ok,正常运行了,不用那么长的命令行了

?

热点排行