`
zhou304082042
  • 浏览: 31873 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java中class文件编译成exe文件的几种方法 (转)

    博客分类:
  • Java
阅读更多
1. JET
JET是一个优秀的Java语言本地编译器。但该编译器不是开源的,你可以从下面这个网站获得一个测试版本: 
http://www.excelsior-usa.com/jet.html 
或者 http://download.csdn.net/user/jonnyxu

2.exe4j
exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的jar文件,还可以打包成windows服务的程序,并且可以设置最低jre的版本,还可以设定启动画面,虽然java6.0已经实现了这一点,但是还是没有exe4j生成的启动画面快。
下载地址:http://download.csdn.net/user/jonnyxu

3.install4j
install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。
下载地址:http://download.csdn.net/user/jonnyxu

4.InstallAnywhere
下载地址:http://download.csdn.net/user/jonnyxu

5.IBM AlphaWorks
使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得: 
http://www.alphaworks.ibm.com/tech/hpc 

6.Jar2Exe
    本软件可以将 Jar 文件转化为 Exe 可执行文件,使采用 Java 开发的软件更加方便地执行和发布,避免了采用批处理文件进行启动带来的麻烦。生成的 Exe 可执行文件可以自动从“注册表”、“环境变量”或者“配置文件”找到运行环境,并自动执行指定的启动类。
     本软件可以生成:“控制台程序”,“隐藏控制台的 Windows 窗口程序”以及“后台启动运行的 Windows NT 服务程序”三种类型的可执行文件。
下载地址:http://download.csdn.net/user/jonnyxu

7.JBuilder
这个工具不用多讲了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,从jbuilder7.0开始都可以生成exe文件。 这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件。
JBuilder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动Java程序,可以出现或者不出现console窗口。想做到这些,需要JBuilder的bin目录下的这些文件:
JBuilder.exe
JBuilderW.exe (可选)
JBuilder.config
jdk.config
JavaLauncher.dll
“JBuilder.exe”是一个通用的可执行外壳文件,用以启动Java程序,”JBuilderW.exe“好像是javaw.exe一样,它把”JBuilder.exe”包装起来,但是运行时候不显示那个console的窗口。使用这些文件的关键是文件名。“JBuilder.exe”查找一个文件叫”JBuilder.config”的配置文件,里面包含了运行Java程序的必须信息。同样的”JBuilderW.exe”查找”JBuilder.exe”来启动不带Console窗口的Java程序。如果把JBuilder.exe重命名为”foo.exe”,那”foo.exe”将去寻找”foo.config”配置文件,同样”JBuilderW.exe”被重命名为”fooW.exe”,它会去寻找”foo.exe”文件。
说到这里,聪明的读者应该猜到怎样利用JBuilder.exe来启动应用程序了。只要把JBuilder.exe,JBuilerW.exe,JBuilder.config改名成相应的文件名,在JBuilder.config里面指定主类和类路径,就能够通过执行JBuilder.exe(或者被改名后的exe文件)来启动Java应用程序了。下面是用本机为例。
Borland JBuilder 5被安装在E:\jbuilder5\目录下,在E:\jbuilder5\bin\下建立一个temp目录,然后把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四个文件拷贝到E:\jbuilder5\bin\temp\目录下,然后在这个目录下建立一个hello目录,在这个目录下生成一个hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件,
//hello.java/
package hello;
public class hello{
public static void main(String s[]){
System.out.println("Hello, Exe file!");
}
}
编译成class文件,然后打开Jbuilder.config文件,作相应的修改:
在JBuilder.config里面找到下面两行
# Start JBuilder using the its main class
mainclass com.borland.jbuilder.JBuilder
修改为
# Start JBuilder using the its main class
mainclass hello.hello
addpath E:/jbuilder5/bin/temp/
addpath命令是把目录加入类路径中,这个命令和其它config里面可以识别的命令可以在JBuilder/bin目录下的config_readme.txt里面找到详细说明。
然后将jdk.config里面的javapath修改成相对的路径,例如原来是
javapath ../jdk1.3/bin/java
修改成
javapath ../../jdk1.3/bin/java
最后
将JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
现在执行foo.exe文件
至此,通过修改JBuilder来使用exe文件启动自己的Java应用程序已经完成了。
但是好玩的地方并不在这个地方,下面的小技巧可能更有趣,将Jar文件打包进入exe文件!
假设利用上面的文件,生成hello.jar包,
jar cvf hello.jar hello\*.class
然后将jar包附加到JBuilder.exe后面去,
copy /b ..\JBuilder.exe+hello.jar foo.exe
在foo.config(JBuilder.config)文件里面把前面加入的类路径去掉,并加入下面的路径:
addpath E:/jbuilder5/bin/temp/foo.exe
然后执行,foo.exe
看到了么?一个含jar包的exe文件被执行了!
这个过程的大致原理是:exe文件的重要信息都在文件头部,所以把乱七八糟的东西放exe文件尾部是不要紧的;而jar/zip文件的重要信息是在文件尾部的,这样它们两不相干,能够容易的被执行。
请注意:读者如果使用这个功能,得自己承担可能带来的风险,因为Borland对这个功能不提供官方的支持!


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjny520/archive/2008/12/31/3669459.aspx
分享到:
评论

相关推荐

    将Java应用程序本地编译为EXE的几种方法

    将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET) 1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。 2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这...

    java Class文件解密大师

    本软件能静态解密常见几种加密过class文件 此工具 支持我心飞扬类加密工具(class文件加密器) V2 以及class文件加密专家V3.5等网络上能找到加密工具 制作 by 大师♂罗庄 http://blog.csdn.net/luozhuang

    java.class反编译软件

    非常好用的java反编译软件,可以反编译.class文件 查看其内源代码,本人的.class找了好几种都不能反编译但是用这个软件一下就解开了。试试就知道了不会后悔的!

    class文件反编译

    在众多的JAVA反编译工具中,有几种非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产...

    Java反编译工具CFR_110

    如果需要反编译java 7的class, 个人推荐使用procyon, 其次是cfr 对复杂支持度还是很不错的。 个人认为Java(Android)反汇编的优秀程度排名 jGui > Jdec2.0 > procyod > jad > uudejava 对嵌套比较多的for 循环...

    JAVA上百实例源码以及开源项目

     Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...

    JD-GUI 是一个独立图形界面的Java源代码“.class”文件反编译工具 您可以浏览重建的源代码,JD-GUI的即时访问方

    在源代码审计或者进行漏洞挖掘,有时会碰到war包,jar包,或者直接打包的class文件,需要通过反编译进行源...以下是个人常用的几种java反编译工具,个人比较推荐使用IDEA自带的反编译组件,直接调用JD-GUI组件进行反编译。

    JAVA上百实例源码以及开源项目源代码

     Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    java面试宝典

    68、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个...

    JAVA复习资料

    17、如果一个Java源程序文件中定义有4个类,则使用Sun公司的JDK编译器javac编译该源程序文件将产生 4 个文件名与类名相同而扩展名为 class 的字节码文件。 18、开发与运行Java程序需要经过的三个主要步骤为 编辑...

    Java复习大纲面试题.doc

    因为JAVA程序编译后生成的字节码文件(class文件)是跨平台的。JVM不是跨平台,在不同的操作系统上开发JAVA程序,必须安装该操作系统版本的JVM。 4.Java当中如何跳出多重循环? 使用break label; 5.JAVA的数据类型分为...

    java开源包11

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包6

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包9

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    JAD本身是一个命令行工具

    在众多的JAVA反编译工具中,有几种非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产...

    java开源包4

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包101

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    JAVA面试题最全集

    76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...

Global site tag (gtag.js) - Google Analytics