如果我们使用java开发Swing界面程序,运行的方法有两种:
1、直接打jar包时,指定Main的类,由Main类初始化界面。这样的好处是,可以直接通过jar包运行窗口程序(前提是机器上要装jre)。
2、通过操作系统的脚本语言,如Windows中就是cmd,后缀一般是bat(也有cmd的,bat与cmd是两个不同的命令体系,这一点大家要注意),在脚本里面调用java来启动jar包中指定的启动类即可。
以上两种方法各有优缺点:
1、直接jar包启动
- 优点:操作方便
- 缺点:需要装jre、不能在启动时指定参数、不能指定运行jar包时的内存等大小
2、使用脚本命令运行
- 优点:弥补以上缺点(不需要本地装jre,可以将jre打包到程序中,使用命令行指定java所在路径即可)
- 缺点:每次运行总是会附带弹出一个cmd窗口。本来这也不算什么缺点,但这个窗口因为显得很专业的样子,会让一些用户情不自禁地想关闭它!然后一关闭它时,连带被它启动的jar程序也会被关闭,也就是容易引起误操作。本来这样的误操作也没什么,但如果你的程序需要在关闭时要做点什么(比如我写的一个程序就是要在关闭程序时要关闭相关的数据库、清除临时数据等操作),这时候就麻烦了!
本文的重点就是为了解决第2点中cmd窗口的问题(不要问我为什么不使用第一种方式,因为我不想说用户是傻X,也是懒惰的,让他们装jre?开玩笑!),因为在试用时,经常会有人看到这个黑窗口时,就情不自禁地关掉,结果他们发现直接关闭黑窗口要比关闭jar窗口要快许多(因为cmd窗口是直接中断JVM,当然快,jar窗口关闭时要处理许多事情的,当然慢)!本来直接关闭黑窗口的方式也不影响,但他们还经常要把整个程序的文件夹删除重装(因为整个程序是绿色免安装的),这时候就会发生部分文件无法删除(因为数据库没有关闭嘛!),然后他们就会抱怨!所以这个问题,我得解决:
解决方案其实有两个:
1、将cmd窗口隐藏,强制用户关闭窗口进行关闭。这种方式,我查了许久、试验了很多次,在bat文件的开头加上这几行就行了:
if "%1" == "h" goto BEGIN mshta vbscript:createobject("wscript.shell").run("""%~dp0%%~nx0"" h",0)(window.close)&&exit
本以为这样OK了,结果:在运行时360报这个文件可能是病毒!唉~~
2、在程序文件夹中增加一个uninstall.bat文件。虽然这个程序是解压即可用,但为了防止用户乱关闭造成的问题,增加这个文件,让用户删除文件夹时使用这个文件进行卸载。而这个文件里就干一件事,调用关闭时要处理的事情即可,然后删除文件夹内所有的文件,最后提示用户“没有删除的文件请自己删除!”
另外,自从Windows升级到Vista之后,对权限的管理更加严格,如果当前用户不是电脑的管理员权限,则许多操作都需要获取管理员权限才能做,比如我们java程序中要调用启动Mysql数据库,这时候如果启动java程序的用户不是管理员权限,那java程序启动Mysql也一定会失败的!那该怎么处理呢?在cmd的命令中执行下面的语句即可:
%1 %2 ver|find "5.">nul&&goto :st mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :st","","runas",1)(window.close)&goto :eof :st copy "%~0" "%windir%\system32\" 你自己要执行的语句
现在如果大家想实现我标题中所要实现的要求,直接把两段代码放在一起是不行的!会出现死循环!作为程序员,要知道死循环的原因在哪儿!因为这两个语句都有if判断,且都会重新执行整个语句,所以为了让每次执行都会执行不同的条件,需要给执行的语句加上相应的参数即可,根据参数不同进行区分,合并如下:
%1 %2 ver|find "5.">nul&&goto :st mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :st","","runas",1)(window.close)&&exit :st copy "%~0" "%windir%\system32\" if "%3" == "h" goto :BEGIN mshta vbscript:createobject("wscript.shell").run("""%~dp0%%~nx0"" goto :st h",0)(window.close)&&exit :BEGIN 以下是你要执行的代码
如果大家有更好的方式,请不吝赐教啊,在此谢过!
相关推荐
隐藏运行CMD命令脚本,可以使得CMD命令行在后台运行。
java 以管理员身份调用cmd 需要用到的文件 使用命令方法 "解压路径"nircmd.exe elevate +"你需要用的cmd命令
一个用VBS实现CMD窗口的隐藏运行,做小程序的时候经常会用到,很实用的代码。
在cmd窗口运行需要加载含驱动的java程序
项目有时候需要不显示cmd窗口,资源为隐藏cmd命令行窗口的C++源码,适合C++开发者
脚本BAT批处理实现本CMD窗口最小化到任务栏,实现隐藏运行,以管理员权限运行某个exe文件,解决双击无法运行问题。自动关闭任务管理器中的某个exe进程
Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中
管理员身份运行cmd.reg
右键管理员运行CMD注册 一、右键新建“文本文档” 二、将代码复制到文本文档内 三、选择“文件”、“另存为” 四、选择“保存类型”“所有文件” ...即实现任意路径管理员打开CMD窗口。 附带教程文档以及注册文件。
如何使用labview操作CMD窗口,比如关闭windows窗口,关闭windows后台应用程序,调用cmd,事实上,我们需要的很多系统操作方面,的功能在DOS命令中都能找到,每一个DOS命令都是针对操作系统的,凡是涉及到系统调用,而用...
在用pyinstaller打包后不想要后面的终端命令框,但是打包时加了-w或者–noconsole命令后会导致cmd程序不能运行从而出错。这个时候用subprocess可以解决该类问题。 import subprocess cmd = 'your command' res = ...
隐藏cmd命令行运行隐藏cmd命令行运行
bat+sqlcmd 批量运行脚本 Hello,此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行。不用忍受powershell invoke-sqlcmd 的笨重,在指运行时多一种选择。
定时任务,不是循环,可以自定义命令行,运行java程序,git命令,可以定时打包,更新、关机等操作,通过配置自定义时间 config.json 配置文件如下 { "timer": [ "10:00:00", "12:30:00", "20:00:00", "23:40...
在DOS环境下(cmd)编译及运行java程序教程
java窗体嵌入cmd窗口所需jar包 源代码地址:http://blog.csdn.net/lyyybz/article/details/34107789
易语言cmd窗口调用源码,cmd窗口调用
powercmd 一个窗口执行多个cmd 一个窗口打开多个cmd利器,很好用,免去切换窗口的麻烦
管理员运行cmd,自己试试,很管用,我自己试过,不信就不下
使用dos命令设置CMD窗口位置