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

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

    博客分类:
  • Java
阅读更多
关键字: 企业应用   jni    

本人在项目中遇到这样一个问题,要使用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

代码
  1. public void testProcess()   
  2.    {   
  3.        try  
  4.        {   
  5.            String home="e:/process";   
  6.         String command = "D:/Sybase/bin/isql -Uuser -Pyourpwd  -SserverName -iisql.sql";   
  7.         File dir = new File(home);   
  8.            
  9.         Process p = Runtime.getRuntime().exec(command, null, dir);   
  10.            
  11.         StringBuffer strOutput = new StringBuffer();   
  12.         BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  13.         String strProc;   
  14.         while((strProc = in.readLine()) != null)   
  15.         {   
  16.             strOutput.append(strProc+"\n");   
  17.         }   
  18.            
  19.         logger.debug("output is "+strOutput.toString());   
  20.        }   
  21.        catch(IOException e)   
  22.        {   
  23.            logger.warn("IOException ", e);   
  24.        }   
  25.    }   
分享到:
评论

相关推荐

    实用技术在Android 应用中调用 C++ 代码并在新线程中执行 Java 静态方法

    这是 Kotlin 语言编写的 Android 应用程序中的 MainActivity 类,其中声明了一个名为 nativeMethod 的本地方法。该方法会在点击 sampleText 视图时被调用,从而触发 native 方法的执行。在 companion object 中还...

    在Java应用程序中使用JNI来监视CPU详解

    一般来说,JNI有点复杂。但是,如果你仅仅单向调用--从Java调用本地代码,并且仅使用基本型进行通讯--事情还是很简单的。本文介绍了在Java中声明JNI方法,给出了在Java应用程序中使用JNI来监视CPU的实例。

    kettle集成应用之---java调用执行transformation和job

    在java应用程序中集成应用kettle,实现调用资源库上和本地的transformation和job。

    如何在C/C++中调用Java

    JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟机直接嵌入到本地的应用程序中。图1是Sun站点上对JNI的基本结构的描述

    JAVA API官方中文文档

    所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。 在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现...

    java远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java在JDK1.1及以后的版本中实现的,它能让一个Java程序调用网络中另外一台计算机上的Java方法,就如同调用本地方法一样。RMI大大增强了Java开发分布式应用的...

    JNI技术手册 c/c++调用java

    VI. c++如何调用java程序 51 DemoMain.java内容如: 51 采用vc6++ IDE,采用JNI技术实现。 51 1、 编译时 51 2、 运行时 51 程序的关键在 53 VII. JNI 53 一、 定义 53 二、 设计目的 54 三、 书写步骤 54 1) 编写...

    Java程序设计复习题.docx.docx

    在Java程序中import语句可以有多个 在Java程序中import语句可以没有 在Java程序中import语句必须有一个 在Java程序中import语句引入在所有类定义之前 在编译Java程序时,用于指定生成.class文件位置的选项是 B 。...

    Java-Swing嵌入浏览器(本地浏览器和webkit浏览器-火狐内核)

    用DJnative-swt和swt包开发的调用本地浏览器和webkit浏览器的示例

    java api1.6

    所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了再Java虚拟机上运行的整个程序。 在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现...

    java技术及其应用第7章 小程序及多媒体应用

    Applet又称小应用程序,由Web浏览器中的Java虚拟机调用执行。 浏览器可以从Internet下载Applet并在本地运行 Applet带有可视化信息,增加了交互性。 Java支持多媒体信息。现在计算机已经能综合处理多种媒体信息,包括...

    JAVA_API1.6文档(中文)

    java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中...

    onlinePreviewFile-plugin.exe web应用客户端js调用本地应用打开文件

    此插件主要用于web应用在线调用本地程序打开文件,只要在本地安装了相应文件得应用,均可打开,安装插件之后只需用在js中使用location.href=onlinePreviewFile://文件下载路径 即可,示例:location.href=...

     一.JAVA程序传送到手机的方法:

     通过手机上网下载以及使用短信定购的方式,直接在手机的个人文档或者应用程序中找 到(根据手机各不相同),无需在安装,直接可以在类似"我的文件夹"之类的选项找到。  使用电脑下载就需要将文件传送到手机上。 ...

    JDK 11 API .zip

    所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API...

    百度语音合成REST API POST JAVA 保存MP3 格式文件

    网页格式直接返回语音,JAVA程序将POST调用返回的二进制数据流以字节流的方式存储在本地.mp3文件中。鉴于百度语音合成REST API的文档比较模糊,并没提供范例,故提供此下载。程序经测试可运行,只是需要你创建百度...

    Java-Web程序设计实战-第8章-JDBC详解.pptx

    Java程序的JDBC可以分为如下四种驱动类型: 1)JDBC-ODBC桥 ODBC是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的...

    java开源包1

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

Global site tag (gtag.js) - Google Analytics