如何制作调用Jar的EXE程序?

gaoxumei 2008-10-09 04:14:03
如何制作类似:永中Office的EXE文件?
这些EXE不是对Jar文件打包成EXE。是调用Jar文件,且EXE文件很小。启动后只有自己的EXE,没有出现Java的程序进程。
有没有那位老大来个详细解说?
...全文
336 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
East271536394 2008-10-18
  • 打赏
  • 举报
回复

1 搞出.jar 文件,(cmd)
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\xtsaiyy>d:

D:\>c:

C:\Documents and Settings\xtsaiyy>cd /

C:\Documents and Settings\xtsaiyy>cd ..

C:\Documents and Settings>cd ..

C:\>cd ad

C:\ad>jar cvf xt.jar *.class
标明清单(manifest)
增加:DBManager.class(读入= 1700) (写出= 922)(压缩了 45%)
增加:delstuInfo$1.class(读入= 171) (写出= 138)(压缩了 19%)
增加:delstuInfo$eventhandle.class(读入= 2712) (写出= 1499)(压缩了 44%)
增加:delstuInfo.class(读入= 1393) (写出= 886)(压缩了 36%)
增加:stuInfo.class(读入= 3856) (写出= 2131)(压缩了 44%)

C:\ad>dir
驱动器 C 中的卷没有标签。
卷的序列号是 7CC8-2E4C

C:\ad 的目录

2007-12-27 11:13 <DIR> .
2007-12-27 11:13 <DIR> ..
2007-12-14 20:08 1,706 DBManager.java
2007-12-27 11:12 1,700 DBManager.class
2007-12-25 12:40 3,532 delstuInfo.java
2007-12-25 12:40 8,916 stuInfo.java
2007-12-27 11:12 3,856 stuInfo.class
2007-12-27 11:12 171 delstuInfo$1.class
2007-12-27 11:12 2,712 delstuInfo$eventhandle.class
2007-12-27 11:12 1,393 delstuInfo.class
2007-12-27 11:14 <DIR> META-INF
2007-12-27 11:16 6,535 xt.jar
9 个文件 30,521 字节
3 个目录 2,130,173,952 可用字节

C:\ad>jar cvf xtsaiyyy.jar *.class
标明清单(manifest)
增加:DBManager.class(读入= 1700) (写出= 922)(压缩了 45%)
增加:delstuInfo$1.class(读入= 171) (写出= 138)(压缩了 19%)
增加:delstuInfo$eventhandle.class(读入= 2712) (写出= 1499)(压缩了 44%)
增加:delstuInfo.class(读入= 1393) (写出= 886)(压缩了 36%)
增加:stuInfo.class(读入= 3856) (写出= 2131)(压缩了 44%)

C:\ad>java delstuInfo

C:\ad>javaw xtsaiyy.jar

C:\ad>jar cvf xtsaiyy.jar *.class
标明清单(manifest)
增加:DBManager.class(读入= 1700) (写出= 922)(压缩了 45%)
增加:delstuInfo$1.class(读入= 171) (写出= 138)(压缩了 19%)
增加:delstuInfo$eventhandle.class(读入= 2712) (写出= 1499)(压缩了 44%)
增加:delstuInfo.class(读入= 1393) (写出= 886)(压缩了 36%)
增加:stuInfo.class(读入= 3856) (写出= 2131)(压缩了 44%)

C:\ad>jar cvf xt1.jar *.class
标明清单(manifest)
增加:DBManager.class(读入= 1700) (写出= 922)(压缩了 45%)
增加:delstuInfo$1.class(读入= 171) (写出= 138)(压缩了 19%)
增加:delstuInfo$eventhandle.class(读入= 2712) (写出= 1499)(压缩了 44%)
增加:delstuInfo.class(读入= 1393) (写出= 886)(压缩了 36%)
增加:stuInfo.class(读入= 3856) (写出= 2131)(压缩了 44%)

C:\ad>jar cvf xt1.jar adsf *.class adsf 为文件夹
标明清单(manifest)
增加:adsf/(读入= 0) (写出= 0)(存储了 0%)
增加:DBManager.class(读入= 1700) (写出= 922)(压缩了 45%)
增加:delstuInfo$1.class(读入= 171) (写出= 138)(压缩了 19%)
增加:delstuInfo$eventhandle.class(读入= 2712) (写出= 1499)(压缩了 44%)
增加:delstuInfo.class(读入= 1393) (写出= 886)(压缩了 36%)
增加:stuInfo.class(读入= 3856) (写出= 2131)(压缩了 44%)

C:\ad>





















2 用JB打成.exe文件
huangshaolin 2008-10-15
  • 打赏
  • 举报
回复
不是有一个叫jte的软件,据说可以搞成EXE文件,与C++的一样
qingbt 2008-10-15
  • 打赏
  • 举报
回复
exe4j可以啊,怎么说不满意?只要在Windows环境里能直接运行就可以了,不知道LZ还需要什么样的exe
pauliuyou 2008-10-15
  • 打赏
  • 举报
回复
ikvm.net 搜索下
sunyujia 2008-10-14
  • 打赏
  • 举报
回复
dephi版本的,文章中最后调用bat的过程很简单就改成调java了就一句话我就不说了
http://blog.csdn.net/sunyujia/archive/2008/09/29/2996688.aspx
C++版本的,我的资源里面有个资源叫绝版的,以前是开源的外国公司写的,还比较稳定,且可以配置。
同时还有源码和exe,强烈推荐。
以梦为马 2008-10-14
  • 打赏
  • 举报
回复
是说打一个可执行的jar包吗?
gaoxumei 2008-10-13
  • 打赏
  • 举报
回复
我先试一试Sston19的方法。
在此先谢过
酒浪子 2008-10-09
  • 打赏
  • 举报
回复
学习!期待高手解答!
nyzlhao 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xblue3 的回复:]
老是看见你,整天顶!
污染csdn!
[/Quote]
顶!
xstom19 2008-10-09
  • 打赏
  • 举报
回复
对了,运行的时候要在path里加上%JAVA_HOME%\jre\bin\client,要不然会报jvm.dll找不到。
程序没实现自己加载dll的功能。
xstom19 2008-10-09
  • 打赏
  • 举报
回复
#include<jni.h>
#include<windows.h>
#include<string.h>
#include<stdio.h>
#define MAXDIR 256
#define PATH_SEPARATOR ';' /* define it to be ':' on Solaris */

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hprevInst, LPSTR lpCmd, int nShow) {
JNIEnv *env;
JavaVM *jvm;
jint res;
jclass cls;
jmethodID mid;
jstring jstr;
jclass stringClass;
jobjectArray args;

char dir[MAXDIR] = "";


char szDrive[_MAX_DRIVE];
char szFolder[_MAX_DIR];
char szFileName[_MAX_FNAME];
char szExt[_MAX_EXT];


#ifdef JNI_VERSION_1_6
JavaVMInitArgs vm_args;
JavaVMOption options[2];

char jvm_class_path[1024] = "-Djava.class.path=";
char lib_path[256] = "-Djava.library.path=\"";


GetModuleFileName(NULL,dir,MAXDIR);
_splitpath(dir, szDrive, szFolder, szFileName, szExt);
strcpy(dir, szDrive);
strcat(dir, szFolder);

strcat(jvm_class_path, dir);
strcat(jvm_class_path, "bin;");
strcat(jvm_class_path, dir);
strcat(jvm_class_path, "lib\\org.eclipse.swt.win32.win32.x86_3.3.3.v3349.jar;");
strcat(jvm_class_path, dir);
strcat(jvm_class_path, "lib\\spring.jar;");
strcat(jvm_class_path, dir);
strcat(jvm_class_path, "lib\\commons-logging-1.1.jar;");
strcat(jvm_class_path, dir);
strcat(jvm_class_path, "lib\\log4j-1.2.14.jar;");
strcat(jvm_class_path, dir);
strcat(jvm_class_path, "lib\\org.eclipse.equinox.common_3.4.0.v20080421-2006.jar");
options[0].optionString = jvm_class_path;

strcat(lib_path, dir);
strcat(lib_path, "lib\"");
options[1].optionString = lib_path;

vm_args.version = 0x00010002;
vm_args.options = options;
vm_args.nOptions = 2;
vm_args.ignoreUnrecognized = JNI_TRUE;
/* Create the Java VM */
res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
#else

//JDK1_1InitArgs vm_args;
//char classpath[1024];
//vm_args.version = 0x00010001;
//JNI_GetDefaultJavaVMInitArgs(&vm_args);
/* Append USER_CLASSPATH to the default system class path */
//sprintf(classpath, "%s%c%s",
// vm_args.classpath, PATH_SEPARATOR, USER_CLASSPATH);
//vm_args.classpath = classpath;
/* Create the Java VM */
//res = JNI_CreateJavaVM(&jvm, &env, &vm_args);
fprintf(stderr, "JNI Version Not Supported...\n");
exit(1);
#endif /* JNI_VERSION_1_2 */

if (res < 0) {
fprintf(stderr, "Can't create Java VM\n");
exit(1);
}
cls = (*env)->FindClass(env, "ch/tianya/TYZTReaderUI");
if (cls == NULL) {
goto destroy;
}

mid = (*env)->GetStaticMethodID(env, cls, "main",
"([Ljava/lang/String;)V");
if (mid == NULL) {
goto destroy;
}
jstr = (*env)->NewStringUTF(env, "");
if (jstr == NULL) {
goto destroy;
}
stringClass = (*env)->FindClass(env, "java/lang/String");
args = (*env)->NewObjectArray(env, 1, stringClass, jstr);
if (args == NULL) {
goto destroy;
}
(*env)->CallStaticVoidMethod(env, cls, mid, args);

destroy:
if ((*env)->ExceptionOccurred(env)) {
(*env)->ExceptionDescribe(env);
}
(*jvm)->DestroyJavaVM(jvm);
return 0;
}


这个是不带控制台的,要想有控制台的话只要把入口函数改称main就可以了。
另外编译的时候我用微软的编译器顺利编译。用borland c和gcc都链接失败,也试过重新生成lib也不行,要是有人用gcc编译成功,麻烦告诉我下方法。
从eclipse3.3开始,eclipse.exe就是用这种方法的。还有就是这个程序编译完后和eclipse.exe大小一样,都是56k,希望有人能解释一下为什么,因为我对c不是很熟。
更多信息可参考http://java.sun.com/docs/books/jni/第7章
liaoyi_ipanel 2008-10-09
  • 打赏
  • 举报
回复
帮顶~
meadking 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 gaoxumei 的帖子:]
启动后只有自己的EXE,没有出现Java的程序进程。
[/Quote]
那就把
java内嵌到c++代码中去,把JVM载入到C++编写的程序环境中,就没有java的进程了!呵呵
这里有篇文章
http://blog.csdn.net/xiao78xy/archive/2006/05/10/722457.aspx

不过我想sf上面应该有这样的库吧!
無名VF 2008-10-09
  • 打赏
  • 举报
回复
呵 没做过 UP 学习.......
meadking 2008-10-09
  • 打赏
  • 举报
回复
楼主不好意思!呵呵!

要不lihan6415151528你新开个帖子!
里面自己发贴,自己整天顶算了!
这样大家就不会被你污染了!
帖子要顶的话,可以使用

将帖子提前

这个按钮呀!你整天费心给人家顶帖子,精神可嘉!
佩服兄台!
meadking 2008-10-09
  • 打赏
  • 举报
回复
你慢慢顶哦,呵呵!
你从哪里看出人'变态'

我看这个照片挺傻的!能不能换张漂亮的'玉照'呀?
还老是在每个帖子里面,
"顶"
"顶"
你累不累?

由于你的照片和言语多次无聊出现,
严重的污染了在csdn上面'正经'发贴回复的人的视野和心情.
恳请管理员处理一下!

我代表具有正常审美观念的全体csdn会员谴责你的行为和言语!!!
以上言语全部针对具体的"行为","言语",我可不骂人!就骂这些具体的"行为","言语"!
lihan6415151528 2008-10-09
  • 打赏
  • 举报
回复
行了吧 变态家伙! 这里不方便骂你
meadking 2008-10-09
  • 打赏
  • 举报
回复
傻,没话说!
lihan6415151528 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xblue3 的回复:]
引用 1 楼 lihan6415151528 的回复:
顶,

lihan6415151528
这个家伙有点讨厌,你老是顶,顶个屁呀!
老是看见你,整天顶!
污染csdn!
[/Quote]


你变态吧??老兄

我回答问题不会 顶一下爱着你什么事了??
meadking 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 gaoxumei 的帖子:]
这些EXE不是对Jar文件打包成EXE。是调用Jar文件,且EXE文件很小。启动后只有自己的EXE,没有出现Java的程序进程。
[/Quote]
那就用批处理吧,呵呵
java -jar jarfile.jar
你就找个exe工具,这个工具就运行这段代码

java -jar jarfile.jar
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧