`
weiwei5910
  • 浏览: 27710 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类

让我们写的java程序像exe(.bat)一样运行

 
阅读更多

原文链接:http://huangzhir.iteye.com/blog/1883209


java 运行一个程序,用 java 包名.类名

如下

java com.java.Test


这是建立在java 环境变量(PATH,CLASSPATH)已经配置好了,而且没有依赖包的情况下。

要了解环境变量,就要来说JDK,JRE,JVM的关系。
引用http://www.myexception.cn/program/1050343.html
引用
JDK,JRE与JVM浅析(整理)
使用Java -version是如何找到版本的:它是从C:\Program Files\Java\{jre文件夹名}\lib\i386中的jvm.cfg中读取的。

JDK(java develop kit ,java开发套件),JRE(java runtime environment,java运行时环境),JVM(java virtual machine,java虚拟机)
JDK
++
|-----jre
++
|-------jvm
|-------
jre只是jdk的一个部分,我们只要拥有了一份jdk就可以进行java程序开发了,而顾名思义,jre是java运行的时候所依赖的平台,jvm则更只是jre的一个部分,jre除了虚拟机外还提供了众多链接库,这些库会被jvm在运行时调用。
我们会发现java_home/下有一个bin文件夹和一个jre文件夹,而jre文件夹下也有一个bin文件夹,它们一样吗?显然不一样。
java_home/bin中的工具是sun公司提供给我们一些工具,如java.exe,javac.exe,而jre/bin下的工具是运行时所需的,于是我们可以发现java_home/bin下有一个javac.exe,而jre/bin下肯定没有javac.exe,这是很容易解释的。
奇怪的是,sun公司给我们提供了两套jre,稍留意一下我们就会发现在装完jdk,还可以选择装一个jre,这个jre是被默认装到 C:\Program Files\Java下的。sun提供两套jre是有道理的,如果我们只是想运行java程序,那么去官网下一个jre就行了,而无需拿来一个jdk,如果是要开发java程序那就需要一个jdk了."jdk里面的工具几乎都是用java写的,所以jdk本身就是java应用程序,因此要使用jdk附的工具来开发java程序也必须要自行附一套jre才行,这就是java_home\jre存在的原因,而位于Program File\jre的那套jre就是拿来执行我们自己写的java应用程序的。不过,两套中任何一套jre都可以拿来执行我们所写的java应用程序,可是 jdk内附的开发工具在预设开发工具使用包装器(.exe)来启动的情况下,都拿自己支选用java_home\jre".(《Java深度历险》)
因此,现在可以明白设path和classpath的作用了:

path是为jdk提供的那些工具设的,如java.exe,javac.exe 。
classpath是为java程序所用到的库文件所设的 。



如果 java 环境变量已经配置好了,但有依赖包,这样就要设置CLASSPATH

set CLASSPATH=d:\aa.jar;D:\lib\*;  
java com.java.Test 


如果要用相对路径可以用(CLASSPATH有多个用;隔开)

set MY_HOME=%~dp0  
set CLASSPATH=%MY_HOME%xxx.jar;
%MY_HOME%..\lib\*;  
java com.java.Test  



如果 java 环境变量的path,也没设置,就是说你执行java时,也就找不到命令。
这时执行时可以用 jre 里面的java的直接路径来运行。(jre 的绝对路径有空格,路径用“”包)

如下,

set MY_HOME=%~dp0  
set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  
set JAVACMD=“D:\Program Files\MyEclipse 6.5\jre\bin\java”   
%JAVACMD% com.java.Test


也可以设置path

set MY_HOME=%~dp0  
set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  
set PATH="D:\Program Files\MyEclipse 6.5\jre\bin"  
java com.java.Test  


如果想给jvm多分配点内存可用

set MY_HOME=%~dp0  
set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  
set PATH="D:\Program Files\MyEclipse 6.5\jre\bin"  
set JAVA_OPTS=-Xms128m -Xmx256m   
java %JAVA_OPTS% com.java.Test  



可用相对路径,程序写完后,让别人下载,但别人机器可以没jre.或者没配置,这时可以把jre跟程序放一起让用户下载,直接就可以运行。
把jre放在程序上一级中。
如:

set MY_HOME=%~dp0  
set CLASSPATH=%MY_HOME%xxx.jar;%MY_HOME%..\lib\*;  
set PATH=%~dp0..\jre\bin  
set JAVA_OPTS=-Xms128m -Xmx256m   
java %JAVA_OPTS% com.java.Test  



把上面的命名成一个 XXX.bat 名字,
然后建立一个快捷方式,把快捷方式设置成指向XXX.bat ,把快捷方式图标设置成你的图标。
这样就可以exe一样执行了,还是绿色版本的,免安装。就是jre比较大点,有60M左右

程序目录
图标文件
快捷方式文件,指向 XXX.bat,加你的图标
bin\
你的写的程序.jar
XXX.bat
jre
jre文件
lib\

依赖包


%~dp0 为批处理符号

个人理解为 当前执行的批处理所在的目录

分享到:
评论

相关推荐

    bat 运行java main方法

    通过`bat`文件,我们可以轻松地在Windows环境中自动化执行Java程序,这对于测试、调试或部署过程非常有用。同时,这也有助于理解Java程序的生命周期和执行流程,是每个Java开发者必备的基础技能。

    java用bat运行程序

    这样,只需双击.bat文件,就可以自动调用Java虚拟机(JVM)运行我们的Java程序。下面,我们将详细探讨如何实现这个过程以及涉及的相关知识点。 首先,Java程序运行需要Java开发工具包(Java Development Kit,简称...

    shell,bat脚本运行java程序

    下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序** 在Unix/Linux环境中,我们可以创建一个.sh文件作为shell脚本来执行Java程序...

    用bat运行java文件中引用了外部jar的java程序

    在IT行业中,我们经常需要处理各种编程任务,其中之一就是在命令行环境下运行包含外部jar依赖的Java程序。在Windows操作系统中,我们通常会使用批处理(BAT)文件来自动化这一过程。下面将详细介绍如何通过BAT文件...

    推荐了多个详细的startup.bat闪退问题解决办法

    2. Tomcat服务器的使用:Tomcat服务器是一种常用的Web服务器软件,用于运行Java Web应用程序。 3. 环境变量的配置:环境变量是操作系统中的一种配置,用于设置变量的值,以便在命令中使用。 4. 文件权限的设置:文件...

    service.bat文件(Tomcat)

    Apache Tomcat是一款广泛使用的开源Java Servlet容器,它能够运行Java Web应用程序,包括JSP和Servlets。`service.bat` 是Tomcat提供的一个批处理脚本,主要用于在Windows操作系统上将Tomcat服务安装、配置或管理为...

    flink新版本bat启动文件.zip

    4. 打开命令行窗口,切换到`bin`目录下,通过运行`start-cluster.bat`命令来启动Flink集群。 5. 使用`flink`命令(例如:`flink list`列出已提交的作业,`flink cancel <job_id>`取消作业等)进行其他管理操作。 ...

    自己写的可在未安装jdk的电脑上,通过.bat运行的jar包

    标题中的“自己写的可在未安装jdk的电脑上,通过.bat运行的jar包”指的是创建了一个Java应用程序,并将其打包成.jar格式的可执行文件,这样的jar包可以在没有安装Java Development Kit (JDK)的计算机上运行。...

    aapt.exe+apktool.bat+apktool_2.3.0.jar

    总之,"aapt.exe+apktool.bat+apktool_2.3.0.jar"这套组合提供了强大的Android应用逆向工程能力,让开发者能够深入了解APK的工作原理,进行定制化开发或安全分析。然而,正确使用这些工具,并尊重软件的知识产权,是...

    jadx-gui.bat/jadx-gui.exe

    在Windows系统中,`.bat`文件通常是一个批处理脚本,而`.exe`是应用程序的执行文件。这里,`jadx-gui.bat`可能是用于启动`jadx-gui.exe`的一个快捷方式或自动化脚本,两者都是为了运行jadx图形用户界面(GUI)。 ...

    将tomcat的startup.bat改为系统服务的方法

    Apache Tomcat 是一款广泛应用的开源Java Servlet容器,用于部署和运行Java Web应用程序。在系统管理中,为了确保依赖于Tomcat的应用程序能够在开机时自动启动并保持后台运行,将其转换为系统服务是一种常见做法。这...

    APK 最新反编译工具 dex2jar.bat apktool.bat

    3. **aapt.exe**: Android Asset Packaging Tool (aapt) 是Android SDK的一部分,用于处理应用的资源。它能打包、验证、压缩、清单处理和资源命名。在反编译过程中,aapt常被用来辅助解析和打包资源文件,虽然在本...

    java程序启动bat

    这种工具对于那些不想或不熟悉使用命令行的用户很有用,他们可以直接双击`.exe`文件来运行Java程序,而无需知道如何执行批处理文件或了解Java环境。批处理到exe转换器通常会封装批处理文件的内容和必要的Java运行时...

    Android在eclipse 缺少的工具包(hprof-conv.exe,,traceview.bat)

    然而,有时在使用Eclipse进行Android开发时,可能会遇到一些工具包缺失的问题,例如"Android在eclipse 缺少的工具包(hprof-conv.exe, traceview.bat)"。这两个文件是Android SDK中用于调试和性能分析的重要工具。 1...

    Ubantu tomocat启动报错 no opencv_java249 in java.library.path问题解决方案压缩包

    错误提示"no opencv_java249 in java.library.path"表明Java程序在运行时找不到名为`opencv_java249`的本地库,这个库是OpenCV的Java接口,用于在Java代码中调用OpenCV的功能。 2. **检查环境变量**: 首先,检查...

    tomcat service.bat

    Tomcat是开源的Java应用服务器,常用于部署和运行Web应用程序。 描述中的关键信息表明,`service.bat` 文件的作用是将Tomcat配置为服务,这意味着它会遵循Windows服务的管理规范,允许用户以服务的方式控制Tomcat的...

    安卓反编译软件jadx-gui.bat

    在使用`jadx-gui.bat`时,首先需要确保你已经在本地环境中正确安装了Java Development Kit (JDK),因为JADX依赖于JDK来运行。然后,将APK文件移动到包含`jadx-gui.bat`的bin目录下。双击运行这个批处理文件,它会...

    getPackageName.bat 可批量获取apk包名,getSign.bat可获取apk MD5和SHA1,记录一下以防丢失

    下面,我们将深入探讨这两个批处理脚本——`getPackageName.bat` 和 `getSign.bat`,以及它们在Android开发中的作用。 `getPackageName.bat` 脚本是为开发者设计的一个便捷工具,用于快速获取大量APK文件的包名。在...

    运行jar的bat和.sh文件

    通过这样的方式,用户无需了解程序的内部结构,只需在相应的操作系统上运行相应的脚本,即可启动Java程序。这种封装和分发方式在Java应用中非常常见,尤其适用于独立的桌面应用或者服务端程序。

    javajar包运行及bat文件制作.doc

    如果希望在运行时向Java程序传递参数,可以通过在bat文件中修改运行命令来实现。例如,对于以下Java代码: ```java public class TestFrame { public static void main(String[] args) { String s = args[0]; ...

Global site tag (gtag.js) - Google Analytics