彻底解决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,正常运行了,不用那么长的命令行了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值