我想给J2SE程序打包,程序中用了SWING来做UI。我先后用了ECLIPSE NETBEANS JBUILDER三种IDE打包,都没有达到我的要求,所以发帖求助,望知道的高手指点一二,先行谢过。JAR我是能打出来的,而且用JBUILDER还可以打出EXE来,但是有两个问题:1.程序中使用的资源打包进去以后就找不到了,包里是有,但是程序读不到这个资源了,路径我试了很多,无论我怎么写,都找不到资源。2.J2ME程序我混淆过,但是J2SE程序我不知道怎么混淆,用JB混淆会出问题,LOG报错如下:
# ERROR - corrupt class file: cracker/About.class (Incompatible version number for class file format.)# Unrecoverable error during obfuscation:
# java.lang.NullPointerException
java.lang.NullPointerException
at a.a.a.s.for(Unknown Source)
at a.a.a.s.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.a(Unknown Source)
at RetroGuard.main(Unknown Source)
用ECLIPSE NETBEANS我还不知道怎么混淆,NETBEANS混淆J2ME程序是很方便的,在打包里直接就有,还可以调混淆级别,但是J2SE程序就没这么一项,好郁闷。
不混淆的话,即便打包成EXE文件也是可以解压缩,然后反编译的,我试过了,EXE打包其实就是给JAR加了一个壳。我看到别人发布的程序这些问题都可以解决,就是我研究了好久搜贴也找不到相关资源。
另外我还想知道如何打包,才能够让使用者不需要装JDK也能运行我的程序?

解决方案 »

  1.   

    可以使用proguard、yguard 来混淆。打包到jar里的资源使用 getClassLoader().getResource("...")访问。
      

  2.   

    发布程序时带上一份jre。许多java软件都有with-jre、without-jre两种安装包。
      

  3.   

    这个是JDK版本的问题。JB的混淆器是不是只能支持某些JDK版本。
      

  4.   

    网上有缩减版本的Jre下载
      

  5.   

    多谢几位兄弟,你们给我信息让我明白了不少东西。资源的问题搞定了,用的这个getClassLoader().getResource("..."),多谢多谢。我的水平不高,虽然明白了些,但是问题还是没有彻底解决,我还是不能打混淆包出来,还是有几个问题,想请教下:1.你们说的发布程序时带上一份jre是指的哪个文件,在JDK安装后的目录里能找到么?是一个JAR还是什么?
    发布时with-jre,是如何打包,打包时候要做特殊处理么?2.我看有位兄弟提到安装包,我更想知道如何把软件发布成安装包?并且with-jre。3.混淆问题如何解决?我用的JDK版本是1.6,我在JB里先后引入并换了混淆JAR,但是还是不能打出混淆包,我是否是继续去下载新版本的混淆器继续试,还是JB里就是混淆不了呢?
      

  6.   

    另外是否with-jre就是烤一个JRE的JAR包,把它当成资源那样一起打包就行了么??
      

  7.   

    RetroGuard可以实现java程序的混淆。
      

  8.   

    混淆 http://proguard.sourceforge.net/, j2me 或 j2se都行