- 浏览: 321382 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lzy.je:
期待FSF的!1985.10成立到现在GNU有多少大牛的项目数 ...
改变IT世界的11大Apache开源技术 -
dotaking:
7、8不了解
改变IT世界的11大Apache开源技术
Java调用批处理或可执行文件
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:
...
process.waitfor();
...
在上面的程序中,第一行的“.\\p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:
1、执行DOS的内部命令
如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上, 可写成exec("cmd.exe /c dir"),在windows 95/98下,可写成“command.exe /c dir”,其中参数“/c”表示命令执行后关闭Dos立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec("my_dir.bat")。如果仅仅写成exec("dir"),Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。
2、打开一个不可执行的文件
打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。 以打开一个word文档a.doc文件为例,Java中可以有以下两种写法:
exec("c:\\ProgramFiles\\MicrosoftOffice\\office\\winword.exe.\\a.doc");
显然,前一种方法更为简捷方便。
3、执行一个有标准输出的DOS可执行程序
在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:
...
Processprocess=Runtime.getRuntime().exec("cmd/cdir\\windows");
BufferedReaderbufferedReader=newBufferedReader(\
newInputStreamReader(process.getInputStream());
while((ls_1=bufferedReader.readLine())!=null)
System.out.println(ls_1);
process.waitfor();
今天在做客户端程序的自动更新,简单描述一下,就是从服务器上将更新包下载下来,然后在本地解压缩,最后删掉~功能很简单~
但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单,资源需要释放,一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题,但是好在,客户端程序更新完是要重启的,一切都烟消云散了~对于删除不掉ZIP文件的问题,我也流氓一下~用DEL硬删除~此处一定要注意!
这样的调用是没有问题~
这样写是不可能对的~
用Java调用Dos命令时直接用以下命令就可以完成:
Runtime.getRuntime().exec(command);
并可以使用Process类的getInputStream()方法获取输出结果,但是,我在调用一些工具软件的Dos命令时却出现了问题,输出结果只能取到前面一小部分,经测试发现,exec(command)之后没多久,Java就认为这个进程结束了,并立即开始执行下面的操作,但这时command实际上并没有结束,但由于流的关闭而被迫中断。
后来用了同事介绍的方法,将这些Dos命令全部放在一个批处理文件当中,并用
的方法来调用(如果不加cmd /c的话,执行同样会出错),这样一来,Java只是新起了一个进程去执行批处理,并不会去管进程是否结束,而是直接开始执行下面的语句。
但这样还是有一个问题,就是Java和这个批处理没法进行交互,我试过了Process中的existValue()及waitFor()方法(都是网上说可用来判断进程是否结束的方法),但都起不到作用,往往是进程已经结束了,但Java还认为没结束,或者干脆是Java认为结束了,但进程却实际还在运行着。
发表评论
-
java中文问题的分类
2008-12-23 13:12 747中文问题的分类及其建议最优解决办法 <?xml:name ... -
Java编程—多态性
2009-01-05 17:46 699Java编程—多态性 8.5. ... -
Java编程——继承(二)
2009-01-05 17:48 648方法覆盖 前面介绍了继承的一些基础知识,现在介绍一 ... -
Java编程——类(二)
2009-01-05 18:01 6038.2.2.3 构造方法声明 构 ... -
详细解析Java中抽象类和接口的区别
2009-01-06 13:46 658在Java语言中, abstract ... -
[强列推荐]关于java的hashCode方法
2009-03-12 11:39 787[强列推荐]关于java的hashCode方法 有许多人学了 ... -
Java类完整的构造执行顺序
2009-04-02 11:17 1038Java类完整的构造执 ... -
java异常机制介绍
2009-04-28 14:35 806java异常机制介绍 Java 语言要求 java ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:54 809Java安全通信、数字证书及应用实践【IT168 技术文档】一 ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:55 830二、 Java中的数字证书 ... -
Java安全通信、数字证书及应用实践
2009-05-31 11:58 986三、数字证书的签发(签名) 我们在上面创建好了数字证书,但 ... -
Java安全通信、数字证书及应用实践
2009-05-31 12:03 902四、运行我们的 applet 我们来写一个 html文件来 ... -
Java SE 6 新特性: JMX 与系统管理
2009-06-29 14:39 8082006 年底,Sun 公司发布了 Java St ... -
Java:接口回调
2009-07-08 17:32 1112Java:接口回调 接口回调是指:可 ... -
Java Exception 处理之最佳实践
2009-07-08 17:48 746关键字: java/java编程 本文是Except ... -
JAVA对数字证书的常用操作
2009-07-10 10:54 764一需要包含的包 import java.security.* ... -
Java网络编程
2009-07-13 11:12 9221. 什么是TCP/ IP协议? 2. TCP/IP有哪 ... -
java 常用知识
2009-07-13 11:25 7421:关于设置的classpath: 1) ... -
Java语言中的面向对象特性
2009-07-13 11:33 1176课前索引 【课前思考 ...
相关推荐
在Java中执行外部可执行文件或批处理脚本是一种常见的需求,尤其是在需要调用系统级别的工具或者与操作系统进行交互时。通过Java的`Runtime`类及其提供的方法,我们可以方便地实现这一功能。本文将详细介绍如何在...
这一步是为了确保批处理文件能找到Java的可执行文件,如`java.exe`。 3. **项目地址**: `cd /D %PROJECT_DIR%`用于切换到项目目录,`%PROJECT_DIR%`是你需要替换为实际项目路径的占位符。这样,批处理文件就能在...
批处理文件(.bat)是一种文本文件,包含了可执行的DOS命令。当用户运行这个文件时,Windows会逐行解析并执行这些命令。这对于运行Java程序特别有用,尤其是需要设置环境变量或执行多条命令的情况。 2. **JAVA环境...
标题中的“生成java可执行文件”指的是将Java程序转换成可以直接运行的格式,如同Windows操作系统下的.exe文件。这种转换的目的是使Java程序更便于运行,尤其是对于那些没有安装Java运行环境的用户。描述中提到的...
Java调用可执行文件和批处理命令是Java开发中常见的需求,特别是在与系统交互或集成外部工具时。本文将详细讲解两种主要的方法:调用exe文件和通过转换批处理文件来间接调用。 首先,调用Windows下的可执行文件...
这通常涉及到创建一个批处理脚本(在Windows系统中是`.bat`文件,在Unix或Linux系统中是`.sh`文件),然后在这个脚本中调用Java命令来运行程序。这种技术在需要定期执行任务、批量处理数据或者构建自动化流程时非常...
综上所述,Java调用Windows可执行文件是一个常见的需求,可以通过Runtime或ProcessBuilder类实现。理解并正确使用这些功能,可以帮助开发者实现更复杂的跨平台集成需求。在具体应用中,应考虑安全性、错误处理和资源...
将Java程序转换为可执行文件的另一种方法是创建一个批处理文件(.bat),该文件可以调用Java虚拟机(JVM)来执行JAR文件。 1. **创建批处理文件**: - 在Eclipse导出JAR文件所在的目录中新建一个文本文件,例如命名...
在Java编程中,调用批处理操作...总之,Java调用批处理是一个涵盖广泛的主题,从简单的系统调用到复杂的批处理框架,都需要根据实际需求来选择合适的方法。理解这些概念和技术将有助于你编写出高效、可靠的批处理程序。
综上所述,这篇博客可能涵盖了如何创建、配置、执行JAR文件,以及如何使用批处理文件来自动化这些过程,同时处理依赖管理的问题。了解这些知识对于Java开发者来说非常重要,因为它们是日常开发和部署Java应用的基础...
`JAVA_HOME`应指向Java安装目录,`PATH`应包含`%JAVA_HOME%\bin`,这样系统才能找到`java.exe`可执行文件。 批处理文件的运行方式很简单,只需双击该文件或者在命令行窗口中输入文件路径即可。例如,如果批处理文件...
当在命令行输入一个命令时,系统会在PATH变量指定的路径下查找相应的可执行文件。因此,我们需要将JDK的`bin`目录添加到PATH中,以便能直接运行`java`、`javac`等工具。 4. **CLASSPATH**:用于指示Java虚拟机(JVM)...
本文将详细介绍如何创建和使用批处理文件来配置Java开发环境,以及批处理文件在Java开发中的重要性。 首先,Java开发环境主要包括JDK(Java Development Kit)的安装,这是编写、编译和运行Java程序的基础。JDK包含...
通过以上步骤,你就可以成功地将Java原代码转换为可执行的EXE文件,从而使得你的应用程序更加易于分发和使用,特别是在非技术用户群体中。这种方法不仅提高了应用的可用性,也增强了其外观的专业度。
在Java开发中,如果你需要在应用程序启动时确保Oracle服务已经运行,或者需要在程序内部操作Oracle服务,可以使用Java的Runtime类或者ProcessBuilder类来执行批处理文件或直接执行操作系统命令。 总的来说,批处理...
5. **用户界面设计**:客户端通常会有图形用户界面(GUI),可能是使用Java Swing或JavaFX库构建。这些库提供了丰富的组件,如文本框、按钮和标签,用于创建交互式的聊天窗口。 6. **事件驱动编程**:在GUI中,事件...
本篇将详细阐述如何使用Java进行打包和生成可执行文件的过程。 首先,我们需要理解Java应用程序的运行机制。Java程序通常由一个主类(包含`public static void main(String[] args)`方法)开始执行,然后通过JVM...
下面将详细解释如何在Java中打包可执行文件,以及使用批处理加载(BatchLoad)可能涉及的概念。 首先,让我们理解什么是JAR文件。JAR文件是Java平台特有的归档格式,它可以包含多个Java类、资源文件、元数据(如...