把Java程序编成.exe文件

JAVA如何编译成WIN下的窗口类应该用程序  
  
点击数:155 更新时间 :2006-7-14 

我用的VJ++6.0,如何才能将JAVA编译成WINDOWS类型的应用程序呢?可以直接在资源管理器中双击调用的。 
还有,我编写的程序,在集成环境中运行正常,可是在WIN中双击运行不正常,只显示了我第一次编译后的界面,后面所写的代码都没被编译。这是怎么回事呢? 
最后还想请问,如果可生成WIN类应用程序的话,怎么才能更改程序的图标 
--------------------------------------------------------------- 
 
 
JBuilder: 
 
Menu:    Wizard  -->  Native  Executable  Builder    -->  Input  name  and  folder  -->  select  files  -->  select  windows  opeations    ....... 
--------------------------------------------------------------- 
 
 
两个方法如下:     
给你找的!希望对你有帮助:     
 JAR    文件包     
  
JAR    文件就是    Java    Archive    File,顾名思意,它的应用是与    Java    息息相关的,是    Java    的一种文档格式。JAR    文件非常类似    ZIP    文件——准确的说,它就是    ZIP    文件,所以叫它文件包。JAR    文件与    ZIP    文件唯一的区别就是在    JAR    文件的内容中,包含了一个    META-INF/MANIFEST.MF    文件,这个文件是在生成    JAR    文件的时候自动创建的。举个例子,如果我们具有如下目录结构的一些文件:     
  
  ==     
  
  `--    test     
  
       `--    Test.class     
  
把它压缩成    ZIP    文件    test.zip,则这个    ZIP    文件的内部目录结构为:     
  
  test.zip     
  
  `--    test     
  
       `--    Test.class     
  
如果我们使用    JDK    的    jar    命令把它打成    JAR    文件包    test.jar,则这个    JAR    文件的内部目录结构为:     
  
  test.jar     
  
      ¦--    META-INF     
  
      ¦     `--    MANIFEST.MF     
  
  `--    test     
  
    `--Test.class     
  
2.    创建可执行的    JAR    文件包     
  
制作一个可执行的    JAR    文件包来发布你的程序是    JAR    文件包最典型的用法。     
  
Java    程序是由若干个    .class    文件组成的。这些    .class    文件必须根据它们所属的包不同而分级分目录存放;运行前需要把所有用到的包的根目录指定给    CLASSPATH    环境变量或者    java    命令的    -cp    参数;运行时还要到控制台下去使用    java    命令来运行,如果需要直接双击运行必须写    Windows    的批处理文件    (.bat)    或者    Linux    的    Shell    程序。因此,许多人说,Java    是一种方便开发者苦了用户的程序设计语言。     
  
其实不然,如果开发者能够制作一个可执行的    JAR    文件包交给用户,那么用户使用起来就方便了。在    Windows    下安装    JRE    (Java    Runtime    Environment)    的时候,安装文件会将    .jar    文件映射给    javaw.exe    打开。那么,对于一个可执行的    JAR    文件包,用户只需要双击它就可以运行程序了,和阅读    .chm    文档一样方便    (.chm    文档默认是由    hh.exe    打开的)。那么,现在的关键,就是如何来创建这个可执行的    JAR    文件包。     
  
创建可执行的    JAR    文件包,需要使用带    cvfm    参数的    jar    命令,同样以上述    test    目录为例,命令如下:     
  
jar    cvfm    test.jar    manifest.mf    test     
  
这里    test.jar    和    manifest.mf    两个文件,分别是对应的参数    f    和    m,其重头戏在    manifest.mf。因为要创建可执行的    JAR    文件包,光靠指定一个    manifest.mf    文件是不够的,因为    MANIFEST    是    JAR    文件包的特征,可执行的    JAR    文件包和不可执行的    JAR    文件包都包含    MANIFEST。关键在于可执行    JAR    文件包的    MANIFEST,其内容包含了    Main-Class    一项。这在    MANIFEST    中书写格式如下:     
  
Main-Class:    可执行主类全名(包含包名)     
  
例如,假设上例中的    Test.class    是属于    test    包的,而且是可执行的类    (定义了    public    static    void    main(String[])    方法),那么这个    manifest.mf    可以编辑如下:     
  
Main-Class:    test.Test    <回车>     
  
这个    manifest.mf    可以放在任何位置,也可以是其它的文件名,只需要有    Main-Class:    test.Test    一行,且该行以一个回车符结束即可。创建了    manifest.mf    文件之后,我们的目录结构变为:     
  
  ==     
  
      &brvbar;--    test     
  
      &brvbar;     `--    Test.class     
  
  `--    manifest.mf     
  
这时候,需要到    test    目录的上级目录中去使用    jar    命令来创建    JAR    文件包。也就是在目录树中使用“==”表示的那个目录中,使用如下命令:     
  
jar    cvfm    test.jar    manifest.mf    test     
  
之后在“==”目录中创建了    test.jar,这个    test.jar    就是执行的    JAR    文件包。运行时只需要使用    java    -jar    test.jar    命令即可。     
  
需要注意的是,创建的    JAR    文件包中需要包含完整的、与    Java    程序的包结构对应的目录结构,就像上例一样。而    Main-Class    指定的类,也必须是完整的、包含包路径的类名,如上例的    test.Test;而且在没有打成    JAR    文件包之前可以使用    java    <类名>    来运行这个类,即在上例中    java    test.Test    是可以正确运行的    (当然要在    CLASSPATH    正确的情况下)。 
--------------------------------------------------------------- 
 
但这样的project.exe有时无法显示? 
--------------------------------------------------------------- 
 
【转载一个把Java程序编成.exe文件的方法】 
几种java转exe的工具,进行一下比较,谈谈自己的看法:

1. 从www.towerj.com获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。
注:现在已经找不到,不提供了,被人家收购了。

2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:
http://www.microsoft.com/java/download/dl_sdk40.htm

jexegen的语法如下:

jexegen /OUT:exe_file_name
/MAIN:main_class_name main_class_file_name.class
[and other classes]

注:没有试过

3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。
注:没有试过

4. 使用InstallAnywhere创建安装盘。
注:很不错的工具。
但就是要>8M(带jre),还有一种是>1M的(不带jre)。
但是它可以编译成各种平台上可以使用的exe程序。

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

注:没有试过

6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本:
http://www.excelsior-usa.com/jet.html

注:不喜欢。
编译好的程序还是jre的,听说正版的可以不能jre。安装好还要编译,我用了30分钟。

7. Instantiations公司的JOVE
http://www.instantiations.com/jove/...ejovesystem.htm
JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede已经不复存在了。

注:太烦了,老是出来一个对话框
用过,会出来一个对话框,表示这是jove公司的产品。

8. JToEXE
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。
公司主页:http://www.bravozulu.com/
下面这个FTP上曾经有过这个软件,不知道现在是不是还在:
ftp://race.dlut.edu.cn/pub/java/tools/jet

注:很烦了,老是出来一个对话框,但是没有想到我找到了crack,在google上找到。
现在去掉了那个对话框后,我很喜欢这个工具,虽然它需要jre,但是文件只有100多K,很好哦。

9.Exe4j
很不错

10.jbuilder
这个工具不用多讲了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,所以可以用如下的方法实现。这可以人家高手想出来的,我只是帮着宣传一下。
还有jbuilder7.0开始都可以生成exe文件。

这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件来启动Java文件。
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对这个功能不提供官方的支持!

你可能感兴趣的:(java,jdk,windows,JBuilder,Borland)