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

教你如何在java程序中调用本地应用程序

阅读更多
本人在项目中遇到这样一个问题,要使用java来调用本地应用程序执行某些操作,例如执行isql命令,来kill掉数据库中的某些进程,这些是数据库本身的命令,很多jdbc根本不支持这些命令,所以不得不使用调用本地应用程序来执行这些命令。
java 中Runtime类是可以调用本地应用程序的可以通过Runtime.getRuntime()来得到Runtime实例,然后执行exec方法来调用本地应用程序,Runtime类中有很多exec方法,参数不同,但是最后都会调用exec(String[] cmdarray, String[] envp, File dir) 这个方法,
其中cmdarray是要执行的本地命令集合,envp是环境变量,dir是exec返回的Process的工作目录。
比较容易出错的地方是环境变量的设置,如果envp  is null,那么它会集成它的父进程的环境变量,如果不知道怎么设环境变量,这通常是一个好的选择,如果环境变量设置不当很有可能找不到dll或其他东西而是本地应用程序执行失败,一般会报这样的异常
> java.io.IOException: CreateProcess: yourcmd error=2
> at java.lang.Win32Process.create(Native Method)
> at
> java.lang.Win32Process.<init>(Win32Process.java:63)
> at java.lang.Runtime.execInternal(Native Method)
> at java.lang.Runtime.exec(Runtime.java:566)
> at java.lang.Runtime.exec(Runtime.java:428)
> at java.lang.Runtime.exec(Runtime.java:364)
> at java.lang.Runtime.exec(Runtime.java:326)
error =2表示filenotfound
 public void testProcess()
    {
        try
        {
            String home="e:/process";
	        String command = "D:/Sybase/bin/isql -Uuser -Pyourpwd  -SserverName -iisql.sql";
	        File dir = new File(home);
	        
	        Process p = Runtime.getRuntime().exec(command, null, dir);
	        
	        StringBuffer strOutput = new StringBuffer();
	        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
	        String strProc;
	        while((strProc = in.readLine()) != null)
	        {
	            strOutput.append(strProc+"\n");
	        }
	        
	        logger.debug("output is "+strOutput.toString());
        }
        catch(IOException e)
        {
            logger.warn("IOException ", e);
        }
    }
分享到:
评论
6 楼 IvanLi 2006-09-22  
devworks 写道
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

good article, very helpfull
5 楼 devworks 2006-09-21  
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
4 楼 IvanLi 2006-09-21  
只是一个sample而已,这个程序的目的是能够调用本地应用程序,OO,封装是后话
3 楼 抛出异常的爱 2006-09-21  
最好OO一点
只让程序去运行一个.bat文件
而文件的内容可以在机器上自己去调整
不要放到程序中去
path这种东西太多变化了。。。
2 楼 IvanLi 2006-09-21  
上面不是有例子吗
1 楼 Arden 2006-09-21  
哪位,我也想知道怎么做?

相关推荐

    web调用本地应用程序.zip

    在IT领域,"Web调用本地应用程序"是一个重要的技术主题,尤其在构建混合式应用时。这个主题涉及到如何从Web应用程序中启动、控制或者与用户的本地应用程序进行交互。以下是对这个主题的详细解释: 首先,我们要理解...

    java中调用本地exe文件

    在Java编程语言中,有时我们需要实现与操作系统交互的功能,例如执行一些特定的本地应用程序或脚本等。本文将详细介绍如何在Java中调用本地exe文件,并解析提供的代码示例。 ### 一、Java中调用本地exe文件的基本...

    java调用本地打印机

    在Java编程环境中,调用本地打印机是一项常见的任务,特别是在企业级应用中,如报表生成、文档打印等场景。本文将详细讲解如何利用Java API来实现这一功能,以及可能遇到的问题和解决方案。 首先,Java提供了`java....

    java调用Windows应用程序

    通过上述介绍,我们可以看到Java程序调用Windows应用程序是一个非常实用且功能强大的特性。无论是简单的系统应用还是自定义的exe文件,甚至是特定类型的媒体文件,都能轻松实现。然而,在实际应用中还需注意安全性、...

    从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法

    在做 web 应用的时候,我们经常会遇到在 web 中调用本地应用程序的问题,例如在 web 中点击一个按钮,然后打开自己写的或者别人的应用程序。这种方法可以应用于各种场景,例如 QQ 客服、淘宝的阿里旺旺客服等。 ...

    Java语言如何调用C++语言编写的本地方法

    在Java程序中调用用C++语言编写的本地方法,是通过Java本地接口(JNI)实现的,JNI是Java提供的一套标准编程接口,用于Java代码和本地应用程序或库之间的交互。本地库通常是用C或C++编写的动态链接库(在Windows上是...

    基于Java程序调用VC 中的DLL的研究与应用.pdf

    JNI是一种标准的API,允许Java程序调用本地代码,包括DLL。使用JNI可以使Java程序调用VC++中的DLL,从而实现Java程序和VC++程序之间的互相调用。 在Java中调用VC++中的DLL需要遵循以下步骤: 1. 创建Java类,用于...

    java调用本地浏览器的demo

    在实际开发中,这种技术常用于自动化测试,需要在程序运行时打开特定网页以进行交互测试,或者在桌面应用程序中提供"帮助"链接,直接在用户的默认浏览器中显示相关文档。 总结一下,Java调用本地浏览器的关键在于...

    Java本地调用接口 JNative

    它通过定义一组C/C++的头文件和库,使得开发者能够在Java程序中声明本地方法,并在本地代码中实现这些方法。当Java代码运行时,JVM会加载本地库并执行这些方法。 2. **JNI环境设置** 在开始编写JNI代码之前,需要...

    java swing 调用本地摄像头

    在Java Swing中,我们可以通过Java Media Framework (JMF) 或者更现代的JavaFX来实现调用本地摄像头的功能。下面将详细介绍如何在Java Swing应用中实现这一功能。 首先,让我们了解Java Media Framework (JMF)。JMF...

    RFID读卡程序-桌面应用程序-Java-JNI调用Delphi版DLL

    综上所述,这个项目展示了如何在Java桌面应用程序中通过JNI调用Delphi编写的DLL,实现RFID读卡功能。这种跨语言的编程方式结合了Java的平台无关性和Delphi的高效性,为RFID应用提供了灵活且高效的解决方案。

    java调用c#样例

    C# DLL通常包含.NET Framework中的方法和功能,而Java应用程序可以借助Jacob库来访问这些功能,从而实现跨语言的互操作性。 描述中提到,这是一个利用Jacob库的示例程序,展示了如何从Java中调用C# DLL的简单方案。...

    Java通过JNA调用系统API

    JNA 是一个开源库,它允许Java程序直接调用本地库函数,无需编写JNI(Java Native Interface)代码。JNA通过映射Java接口到本地库函数来实现这一功能,简化了Java与本地代码的交互。 2. **调用系统API**: 在...

    Java调用小票打印机打印小票

    在IT行业中,尤其是在开发零售或餐饮系统的背景下,Java调用小票...以上就是关于“Java调用小票打印机打印购物清单”这一主题的主要技术点,理解和掌握这些知识对于开发能够与硬件设备有效交互的Java应用程序至关重要。

    java程序调用.net/c#的webservice

    Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...

    JAVA程序设计语言Applet应用程序.pdf

    ### JAVA程序设计语言Applet应用程序知识点详解 #### 1. Java程序分类 Java程序主要分为两类:Java Application 和 Java Applet。 - **Java Application**:这类程序是独立运行的Java程序,通常具备`main`方法作为...

    java调用c c++程序实例

    最后,将生成的动态链接库(.dll)放置在Java应用程序的类路径下,或者在系统路径中,这样Java就能找到并加载它。 在Eclipse中,你可以使用外部工具配置来编译C/C++代码,并在Java项目中设置相应的依赖,使得整个...

    Java调用本地的远程桌面连接

    总之,Java调用本地的远程桌面连接是一种结合操作系统功能和Java编程的技术,它在自动化运维、远程支持等领域有着广泛的应用。然而,使用时需要注意安全性和稳定性,确保数据的保密性,并考虑在不同环境下的兼容性。

Global site tag (gtag.js) - Google Analytics