`

Java调用windows程序

    博客分类:
  • Java
阅读更多
转自:http://blog.csdn.net/54powerman/archive/2006/04/03/649086.aspx

由于工作中要使用Java调用4U Wma Mp3 Converter命令行将vox格式转换成WMA格式,以方便在网页中试听,所以想到用java.lang.Runtime来处理这个问题。在使用过程中碰到了一些以前没有留意的问题,整理如下:

一 最简单的调用方式
String cmd="WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");

总结:此方法,要求可执行文件在Tomcat的工作目录中。一般的,程序安装目录都在Tomcat目录之外,所以使用绝对路径来替代以上方案。

二 使用全路径调用可执行文件
String cmd="C:\\WMA\\WMAMP3Converter.exe";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");

总结:此调用方式执行没有问题,后来测试完成后部署到服务器上,发现问题又出来了,程序执行错误。分析原因,因为本地测试和服务器安装路径不同,服务器安装软件的目录为C:\Program Files\4U Computing\WMA MP3 Converter\,这里路径里有空格,造成空格处断开,所以命令行无法正确截取参数。

三 安全的全路径方式调用执行文件
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");

总结:在cmd串中,把可执行文件的全路径用双引号包含,就可以解决路径、文件名中包含空格、全角字符等问题。

程序运行一段时间以后,发现有时候程序执行完后转换文件没有,程序没有错误,而且服务器上有很多进程没有结束。原来调用可执行文件失败了,但是程序不知道,以为成功了,然后继续去找转换后的文件来播放导致失败。分析原因,是因为上面的方式异步的,也就是说java提交运行文件的命令以后,立即转到播放模块。
解决办法就是让命令行同步方式执行,也就是主程序等待调用可执行文件结束以后再执行。(注:当然,播放之前检查文件是否存在也是可以的,这里是说明同步异步的问题。)

四 异步方式调用外部可执行文件
Process process=null;
String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
process = java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
process.waitFor();

总结:构造一个Process对象,将运行进程获取过来,控制这个进程等待调用结束再继续运行。OK。

五 顺便说一下,使用Process对象以后,可以用如下方法返回错误信息和输出信息,来进一步控制进程运行。
process.exitValue()
process.getErrorStream()
process.getInputStream()
process.getOutputStream()
分享到:
评论

相关推荐

    java调用Windows应用程序

    是java程序调用windows中的应该程序的例子, 大家可以可以参考一下.

    java调用windows命令

    JAVA如何调用WINDOWS命令行 用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令

    java获取当前windows进程pid

    进程可根据该pid调用exec自杀 注意事项:不能改变PidTool.java所在的包,否则需要重行生成dll。 编译命令中 "-PidTool.dll" 改为 "-FePidTool.dll",我整漏了! 使用方法: 1.javac PidTool.java 2.javah -jni ...

    windows弹窗实现.java

    使用java实现windows弹窗

    使用JavaService把Java程序转换成windows服务

    使用JavaService把Java程序转换成windows服务

    Java调用Windows批处理.docx

    有时候,JAVA程序需调用本地的批处理进行一些处理,下面的代码就演示了如何在JAVA中调用本地的批处理文件

    使用JavaService将java程序安装位windows服务

    使用JavaService将java程序安装位windows服务

    JAVA访问WINDOWS注册表

    利用JAVA来访问注册表,希望对大家有帮助

    Java调用Labview生成的DLL文件

    1、Labview生成Dll文件 2、Java通过Jnative第三方Jar包调用Labview生成的DLL文件 3、Java在Windows系统调用Labview生成的Dll的说明 有JNative的使用说明 直接下载,根据使用说明可以直接使用。

    基于JAVA的Windows记账程序

    数据存储:Windows记账程序需要能够保存用户的财务信息。本程序使用MySQL,sql代码已包含在内,按照指示配置即可。 数据模型和逻辑:设计数据模型和实现相关的业务逻辑。考虑使用面向对象的设计模式,将数据、界面...

    Java程序设计基础:使用Eclipse创建和运行Java程序.pptx

    使用Eclipse创建和运行Java程序 使用Eclipse开发Java程序 ...在Windows下使用Eclipse,除了需要Eclipse软件包之外,还需要Java的JDK来支持Eclipse的运行。 Eclipse开发环境 创建工作空间workspace 创建工程proj

    Java开发模拟Windows系统自带画图工具程序完整练手项目流程实战_优秀案例实例源代码源码.zip

    一起来画画是一款用Java语言编写的模拟 Windows系统自带画图工具的程序。此画图程序集合了设置画笔粗细、选择背景颜色、选择画笔颜色、绘制图形、清除图像、使用橡皮和展开简笔画参考示例等功能。

    java 程序使用redis + windows服务端

    java 程序使用redis + windows服务端 1.点击 /redis服务端/hcredis.bat 启动服务端 2.把jar导入到项目里面 3.把配置文件 redis.properties 导入 src下 4.JedisUtil.java 里面提供了缓存的添加 删除

    java调用本地dll的几种方法性能对比测试

    java调用本地dll的几种方法性能对比测试。 JNA消耗的总时间(ms):5406 bridj消耗的总时间(ms):984 JNI消耗的总时间(ms):47 包含c++源码和java源码,部署和使用方法。在win7和winxp下测试用过。 部分源码是...

    Java用JLabel调用显示windows字体美化窗口.rar

    Java调用windows字体美化窗口,显示多种字体,用JLabel实现,可以很方便 的调用宋体、黑体、Sanf等多种系统字体,轻松改变窗口界面中的字体风格,从而起到美化窗口界面的作用。代码是这样的:  //字体数组:  ...

    Java通过JNA调用系统API

    Java通过JNA调用系统API示例,调用 Kernel32.dll文件中的GetLocalTime(),GetSystemTime(),SetLocalTime()方法。

    java小程序画板

    1、实现友好的Windows画板界面,包括Windows基本菜单、画图功能菜单和常用菜单的工具栏。 2、实现画不同颜色,不同宽度,不同...9、将开发好的应用程序及其所需的DLL文件通过打包软件,制作成安装程序,以供他人使用。

    JAVA写的画图(画板)程序

    JAVA写的画图程序,附件为Eclipse工程文件夹,实现Windows自带画图的自定义缩放画布、直线、圆、矩形、线宽/颜色定义等基本功能。

    Java读取Windows字体并演示字体样式效果.rar

    Java读取Windows字体并演示字体样式效果,程序读取Windows系统所安装的字体,然后允许用户对字体样式进行自定义,最后使用Graphics2D 类中的drawString()绘制输出字体效果,如演示截图所示的运行结果。

Global site tag (gtag.js) - Google Analytics