制作运行Java的exe

    运行java程序时,由于离不开jre,所以在没有jre的机器上调试得复制jre,而且还得在命令行下运行,很不方便。于是就有批处理(*.bat)来帮我们解决这些问题。批处理很方便调试,但实际应用起来:会有窗口一闪而过,而且不能设制漂亮的图标,显然还不够完美。 
    网上确实有不少免费或收费的javaexe的软件,功能也很强大,网上也都介绍过,可是简单的功能我们自己也可以实现。 
    原理其实很简单,把class的字节码转换为本地机器的汇编语言显然不现实,我们只要知道如何用批处理就可以了,不就是制作一个exe代替这个批处理嘛。我c语言很菜,更是没怎么接触windows编程,于是我开始想当然的用system(“javaw a.jar”),可是一个Console程序还是会有一个窗口(用的editplus+gcc.exe编译出来的只能是控制台程序)。
    没办法了只有使用windows SDK了,做个没有窗口的程序,那如何调用java.exe呢?用system()或是exec系列函数还是会有窗口,还是只有用windows API了,通过查资料得出CreateProcessshellexecuteWinExec可以用,这几个函数一个比一个简单但功能也越少,就用WinExec吧,够用就行。
    新建一个目录test,放入jre的文件夹(如jre1.5.0_14)还有要运行的*.jar(如a.jar),使用dev-c++(vcvc++IDE应该都一样吧test文件夹下新建一个windows应用程序工程,再把跟窗口相关的东西删掉,其实就是全删,输入以下程序:
#include <windows.h>
int main ()
{
    WinExec("jre1.5.0_14//bin//javaw -jar a.jar", SW_HIDE);
    return 0;
}(这个跟控制台程序有什么区别?!我也没深究,大概是与编译方式和库函数有关吧) 

    编译成功后,就可以很方便的用exe运行java了,还可以在工程属性里设置文件图标,真正做起来一分钟都不到,我看那些转换工具都是这个原理吧。

    这个方法我是去年想到的,今天想起来就穿了上来,做好后发现有篇文章提到了这方法,不过是.net的,原理差不多。

猜你喜欢

转载自blog.csdn.net/chch87/article/details/3877762