`
hellohank
  • 浏览: 146354 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用cmd脚本运行java窗口程序(Swing界面),同时又要让CMD窗口隐藏且同时获得管理员权限

阅读更多

如果我们使用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

以下是你要执行的代码

 

 

如果大家有更好的方式,请不吝赐教啊,在此谢过!

分享到:
评论

相关推荐

    四国军棋界面Swing/AWT的代码

    总的来说,"四国军棋界面Swing/AWT的代码"项目展示了如何利用Java的GUI库来开发桌面应用程序,同时也涉及到软件工程中的构建和打包流程。如果你对Java GUI编程感兴趣,或者想要了解如何将棋类游戏逻辑与图形界面相...

    java拖动对象程序

    在压缩包中,`双击启动.cmd`文件可能是一个批处理脚本,用于在Windows环境下启动Java程序。`源码`可能包含了实现拖放功能的Java文件,这些文件可能包含自定义的`TransferHandler`和GUI组件的定义。而`类`可能是其他...

    java执行可执行文件或批处理

    `Runtime.getRuntime()`方法用于获取当前Java应用程序的运行时对象,通过这个对象可以调用`exec()`方法来启动一个新的进程。 #### exec()方法详解 `exec()`方法是`Runtime`类中的一个重要成员,它用于启动一个新...

    java项目 监控

    5. **自动化脚本**:"cmd.bat"可能是一个批处理脚本,用于启动、停止或管理监控服务。这在部署和运维过程中非常实用。 6. **文档**:“设备监控使用说明.doc”提供了项目使用的指南,帮助用户了解如何配置、操作和...

    java 文字垂直排列

    如果你需要在GUI应用中使用这种垂直排列,可以结合Swing或JavaFX的布局管理器。例如,在Swing中,你可以创建一个`JPanel`,覆盖其`paintComponent()`方法来绘制垂直文本,然后将其添加到主窗口。 至于“工具”标签...

    java关机代码

    Java提供了多种方式来运行外部命令或脚本,其中最常用的是`Runtime.getRuntime().exec()`方法。该方法允许Java程序执行外部进程,并且能够捕获外部进程的输入/输出流。在这个例子中,通过调用`Runtime.getRuntime()....

    Derby数据库的使用指南--包括存图片到数据库和读取数据库中的图片操作

    2、找到c:\Program Files\sun\JavaDB\lib之后,然后使用cmd命令进行该路径 3、在cmd窗体中输入java -jar derbyrun.jar server start启动derby数据库服务器 4、如果成功,那么在c:\Program Files\sun\JavaDB\lib目录...

    人机对战五子棋程序

    图形用户界面(GUI)是玩家与程序交互的关键部分,可能会使用如Java的Swing或JavaFX,Python的Tkinter,或是C#的WPF等库来实现。GUI的设计应该直观易用,提供清晰的棋盘展示,方便的落子操作,并能有效显示游戏状态...

    Sardak Look and Feel-开源

    同时,META-INF目录包含有关此库的元数据,这对于Java应用程序的打包和运行至关重要。 "doc"目录则包含了Sardak LAF的文档资料,对于开发者来说,这是理解其工作原理和使用方法的重要资源。通过阅读文档,开发者...

    JChess:一个简单的 Java 国际象棋游戏

    它使用 Java 的 Swing 库作为可视化组件,可能违反了大多数代码质量指南和 OOP 原则,因为我最近才开始学习这些。 从好的方面来说,我认为评论很好地解释了正在发生的事情。 从我的测试来看,它应该能够正确地执行...

    MozSwing-开源

    在描述中提到的“Mozilla窗口小部件”是指MozSwing将Mozilla的组件集成到Java Swing的环境中,使得Java开发者可以像使用普通Swing组件一样使用这些Web相关的组件。这包括但不限于Web视图、表单元素、JavaScript执行...

    jdk环境变量设置 以及测试方法

    这不仅确保了Java应用程序能够正常运行,还为开发工具和构建脚本提供了必要的环境支持。本文将详细介绍如何在Windows XP和Windows 7操作系统上配置JDK环境变量,并提供一个简单的示例程序来验证配置是否成功。 ####...

    jdk 1.6 环境变量配置说明 环境变量设置 jdk1.6

    JDK 1.6(也称为 Java SE 6)是在 Java 发展历程中一个重要的里程碑,它引入了许多新特性,例如脚本引擎 API、增强的 Swing 组件、改进的并发支持等。对于 Java 开发者而言,正确配置 JDK 环境变量是非常关键的第一...

Global site tag (gtag.js) - Google Analytics