我用Java写完程序后生成了一个.jar包文件,但是我双击它并不能运行,请问有什么办法不用编译直接双击就可以运行该项目呢?,目前我的项目是java Swing窗体程序,开发工具是Netbeans 6.8!
 
就是写完了Java程序,生成一个类似于.exe和J2me中jar包那样的文件,目的是不用再去程序环境中编译运行,而是双击该项目生成的.jar文件直接运行自己写好的Java程序。哪位高手能告诉我怎么做?最好写得详细点。 
不要用Eclipse啊~~各位高手们帮帮忙,谢谢了!

解决方案 »

  1.   

    有很多中方式
    1:打包成exe,这个有很多工具都可以做到
    2:打包成jar,写一个批处理文件,以后双击批处理文件运行
    3:打包成jar,jar文件关联上javaw.exe打开,也可以直接运行还有一些其它的方式,可以上网找找,很多方式都可以的。
      

  2.   

    但是我打成.jar包,双击它还是运行不了,只能在netbeans下运行.
      

  3.   

    1.首先双击运行JAR有报错吗?
    有报错的话,是不是主类找不到,确定一下自己的程序存在main函数,确定配置了JAVA环境变量,确定注册表JARFILE/shell/open/command路径正确
    2.给你个jar转exe介绍的链接
    http://landmine.javaeye.com/blog/459866
      

  4.   

    打JAR包可以直接运行jar 命令详解 
    jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将 tools.jar 放到 CLASSPATH 中。 
    使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下: 
    jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... 
    其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示: 
     -c 创建新的 JAR 文件包 
     -t 列出 JAR 文件包的内容列表 
     -x 展开 JAR 文件包的指定文件或者所有文件 
     -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中) 
     [vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数 
     -v 生成详细报告并打印到标准输出 
     -f 指定 JAR 文件名,通常这个参数是必须的 
     -m 指定需要包含的 MANIFEST 清单文件 
     -0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快 
     -M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数 
     [jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数 
     [manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数 
     [-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。 
    文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。 
    下面举一些例子来说明 jar 命令的用法: 
    1) jar cf test.jar test 
    该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar,那么该文件将被覆盖。 
    2) jar cvf test.jar test 
    该命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程,如下: 
    标明清单(manifest) 
    增加:test/(读入= 0) (写出= 0)(存储了 0%) 
    增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%) 
    3) jar cvfM test.jar test 
    该命令与 2) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别: 
    增加:test/(读入= 0) (写出= 0)(存储了 0%) 
    增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%) 
    4) jar cvfm test.jar manifest.mf test 
    运行结果与 2) 相似,显示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容 
    5) jar tf test.jar 
    在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,如对于 2) 和 3) 生成的 test.jar 分别应该此命令,结果如下; 
    对于 2) 
    META-INF/ 
    META-INF/MANIFEST.MF 
    test/ 
    test/Test.class 
    对于 3) 
    test/ 
    test/Test.class 
    6) jar tvf test.jar 
    除显示 5) 中显示的内容外,还包括包内文件的详细信息,如: 
    0 Wed Jun 19 15:39:06 GMT 2002 META-INF/ 
    86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF 
    0 Wed Jun 19 15:33:04 GMT 2002 test/ 
    7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class 
    7) jar xf test.jar 
    解开 test.jar 到当前目录,不显示任何信息,对于 2) 生成的 test.jar,解开后的目录结构如下: 
    == 
    |-- META-INF 
    |  `-- MANIFEST 
    `-- test 
    `--Test.class 
    jar xvf test.jar 
    运行结果与 7) 相同,对于解压过程有详细信息显示,如: 
    创建:META-INF/ 
    展开:META-INF/MANIFEST.MF 
    创建:test/ 
    展开:test/Test.class 
    9) jar uf test.jar manifest.mf 
    在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 JAR 文件包中,它跟一般文件无异。 
    10) jar uvf test.jar manifest.mf 
    与 9) 结果相同,同时有详细信息显示,如: 
    增加:manifest.mf(读入= 17) (写出= 19)(压缩了 -11%) 
    4. 关于 JAR 文件包的一些技巧 
    1) 使用 unzip 来解压 JAR 文件 
    在介绍 JAR 文件的时候就已经说过了,JAR 文件实际上就是 ZIP 文件,所以可以使用常见的一些解压 ZIP 文件的工具来解压 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等来解压是因为它们解压比较直观,方便。而使用 unzip,则是因为它解压时可以使用 -d 参数指定目标目录。 
    在解压一个 JAR 文件的时候是不能使用 jar 的 -C 参数来指定解压的目标的,因为 -C 参数只在创建或者更新包的时候可用。那么需要将文件解压到某个指定目录下的时候就需要先将这具 JAR 文件拷贝到目标目录下,再进行解压,比较麻烦。如果使用 unzip,就不需要这么麻烦了,只需要指定一个 -d 参数即可。如: 
    unzip test.jar -d dest/ 
    2) 使用 WinZip 或者 WinRAR 等工具创建 JAR 文件 
    上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具创建所需要 ZIP 压缩包,再往这个 ZIP 压缩包中添加一个包含 MANIFEST 文件的 META-INF 目录即可。对于使用 jar 命令的 -m 参数指定清单文件的情况,只需要将这个 MANIFEST 按需要修改即可。 
    3) 使用 jar 命令创建 ZIP 文件 
    有些 Linux 下提供了 unzip 命令,但没有 zip 命令,所以需要可以对 ZIP 文件进行解压,即不能创建 ZIP 文件。如要创建一个 ZIP 文件,使用带 -M 参数的 jar 命令即可,因为 -M 参数表示制作 JAR 包的时候不添加 MANIFEST 清单,那么只需要在指定目标 JAR 文件的地方将 .jar 扩展名改为 .zip 扩展名,创建的就是一个不折不扣的 ZIP 文件了,如将上一节的第 3) 个例子略作改动: 
    jar cvfM test.zip test 
      

  5.   

    1.确定一下自己的程序存在main函数
    2.确定配置了JAVA环境变量
    3.确定注册表JARFILE/shell/open/command路径正确
      

  6.   

    [Quote=引用 6 楼 luffyke 的回复:]
    引用 5 楼 zhyang18 的回复:
    引用 3 楼 luffyke 的回复:
    1.首先双击运行JAR有报错吗?
    有报错的话,是不是主类找不到,确定一下自己的程序存在main函数,确定配置了JAVA环境变量,确定注册表JARFILE/shell/open/command路径正确
    2.给你个jar转exe介绍的链接
    http://landmine.javaeye.com/blog/459866是的,它提示的错误是找不到主类,怎么解决呢?前面两都没问题,第三个"确定注册表JARFILE/shell/open/command路径正确 
     
    "是什么意思??
      

  7.   


    前面两都没问题,第三个"确定注册表JARFILE/shell/open/command路径正确"是什么意思?? 
      

  8.   

    cmd-regedit-HKEY_CLASSES_ROOT-JARFILE/shell/open/command
    看看路径对不对
      

  9.   

    我的就是"C:\Program Files\Java\jre6\bin\javaw.exe" -jar "%1" %*
    我的JDK和JRE放在C:\Program Files\Java里面
      

  10.   


    我的JDK和JRE也放在C:\Program Files\Java里面,但是你上面这个  -jar "%1" %*  是什么意思?
      

  11.   

    MyEclipse和NetBeans都有清理并生成jar功能
      

  12.   

    是注册表的执行JAR文件的路径
      

  13.   

    打包成JAR 写一个.bat 文件 双击.bat执行
      

  14.   

    SourceForget 上有开源工具:Win4J, 配置一个简单的 ini 文件,告诉启动外壳你调用 jar 需要什么参数。就能被这个 exe 启动外壳调用 java 程序。再用 Nullsoft Install System (Winamp 以前用这个安装) 制作一个安装程序,然后拿到用户机器上安装去。
      

  15.   

    要找原因好不好,
    你说你打了JAR包不能运行,那就是有两种可能,
    一种是jar包没问题,jre有问题(环境变量).
    另一种是jre安装正确(版本,环境变量等都正确),jar包没打好.
    第一个好说安装Jre 设置环境变量
    第二个就要操劳一番.
    关于jar包的打法你要用IDE就要把Main函数写好,然后直接把项目导出成可执行jar(Runnable Jar).其他不用管程序放到什么目录双击就能执行.建议不要加自己的package,使用默认package.要是手动用 jarmingling打包,你要动手写一个 mainfest文件放到
    mainfest文件的写法,用notepad写,有一定的格式,其中一个参数必须写好.Main-Class: 类名     //这里类名就是默认启动的类注意 冒号后面有个空格,然后这个文件一定要以回车键结尾比如你写了一个Test的类 maifest就这样写Main-Class: Test(在这里敲一下回车)然后直接保存为mainfest.mf然后用 jar命令打包
    jar命令详解jar 功能说明: 
    Java归档工具 
    语法: 
    jar [ 命令选项 ] [manifest] destination input-file [input-files] 
    补充说明: 
    jar工具是个java应用程序,可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具,它基于ZIP和ZLIB压缩格式。然而,设计jar的主要目的是便于将java applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class 文件、图像和声音)合并成单个归档文件时,可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件,从而进一步提高了下载速度。此外,它允许applet的作者对文件中的各个项进行签名,因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。 
    命令选项 
    -c 在标准输出上创建新归档或空归档。 
    -t 在标准输出上列出内容表。 
    -x[file] 从标准输入提取所有文件,或只提取指定的文件。如果省略了file,则提取所有文件;否则只提取指定文件。 
    -f 第二个参数指定要处理的jar文件。在-c(创建)情形中,第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中,第二个参数指定要列出或抽取的jar文件。 
     -v 在标准错误输出设备上生成长格式的输出结果。 
    -m 包括指定的现有清单文件中的清单信息。用法举例:“jar cmf myManifestFile myJarFile *.class” 
    -0 只储存,不进行 ZIP 压缩。 
    -M 不创建项目的清单文件。 
    -u 通过添加文件或更改清单来更新现有的 JAR 文件。例如:“jar -uf foo.jar foo.class”将文件 foo.class 添加到现有的JAR文件foo.jar中,而“jar umf manifest foo.jar”则用manifest中的信息更新foo.jar的清单。 
    -C 在执行 jar 命令期间更改目录。例如:“jar -uf foo.jar -C classes *”将classes目录内的所有文件加到foo.jar中,但不添加类目录本身。 
    程序示例 
    1:将当前目录下所有CLASS文件打包成新的JAR文件: 
    jar cf file.jar *.class 
    2:显示一个JAR文件中的文件列表 
    jar tf file.jar 
    3:将当前目录下的所有文件增加到一个已经存在的JAR文件中 
    jar cvf file.jar * 
      

  16.   

    双击.jar的时候,没有信息告诉javaw哪个类有main方法,所以会出现找不到入口的提示。
    这个信息需要在META-INF/MANIFEST文件里指定,具体参考4楼。耐心点看完。
    MANIFEST文件里要加上一行(用于指定Main Class——即main方法所在的类名):
    Main-Class: YourMainClassName
    参考http://www.captain.at/programming/java/executable-java-application.php。
      

  17.   

    这个就是打jar包问题,你可以自己写manifest文件,写完main还不够,还得把你的class path写上。
    class path的内容是jar包中lib文件夹的jar包文件名
      

  18.   

    首先,楼主打包jar,指定main 入口了吗?
      

  19.   

    打包 要写一个 *.mf 的主程序文件哦
    里面写上
    Main-Class: 主程序名然后回车一下
      

  20.   

    打包成jar
    还不能运行?
    环境变量有问题吧?