`
xvridan
  • 浏览: 37420 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

也谈在Java中调用其它的程序(转 作者muiltmeta)

阅读更多

原文出处:http://blog.csdn.net/muiltmeta/archive/2002/05/08/16660.aspx

前一段时间看了《程序员》第 3 Java 专家门诊中怎样调用其它的程序,我把其解答代码放到一个程序中,如下示: <o:p> </o:p>

import java.lang.*;<o:p>

 <o:p>

public class runProg{<o:p>

public static void main(String[] args){<o:p>

       try{<o:p>

         Runtime rt=Runtime.getRuntime();<o:p>

         rt.exec("NotePad");<o:p>

       }catch(Exception e){}<o:p>

}<o:p>

}

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>


在命令符下编译运行,直接调用了记事本应用程序,没有任何问题。 <o:p> </o:p>

但在图形用户的应用程序中,就不能编译,代码示例如下: <o:p> </o:p>

  void jButton1_actionPerformed(ActionEvent e) { <o:p>

    // 下是解答代码

try{<o:p>

       Runtime rt=Runtime.getRuntime();<o:p>

       rt.exec("NotePad");<o:p>

    }catch(Exception e){<o:p>

}

// 上是解答代码 <o:p> </o:p>

  }

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>

 <o:p>


就上面的代码而言,只是说明了调用其它程序的基本方法,但是这段代码根本不能被编译过去,在 Jbuilder 中的编译错误如下:

"Frame2.java": Error #: 469 : variable e is already defined in method jButton1_actionPerformed(java.awt.event.ActionEvent) at line 50, column 18

 <o:p>

 <o:p>

 <o:p>

 <o:p>


看到这个编译错误也许认为是按钮的事件定义错误,实际上是 AWT Component 的事件是线程安全级的,不允许直接使用另外进程或线程,因 Swing 中的组件是从 AWT 中继承来的,所以也不允许直接使用。解决办法只有使用一个新线程。代码如下示:

  void jButton1_actionPerformed(ActionEvent e) {<o:p>

    //must be use a new thread.<o:p>

    Thread t = new Thread(new Runnable(){<o:p>

    public void run(){<o:p>

       try {<o:p>

        Runtime rt = Runtime().getRuntime();<o:p>

        rt.exec(“notepad”);<o:p>

        } catch (IOException e) {<o:p>

        System.err.println("IO error: " + e);<o:p>

      }<o:p>

    }<o:p>

    });<o:p>

    t.start();<o:p>

 <o:p>

  }

但是这段代码还是不能被编译,错误提示如下:

"Frame1.java": Error #: 300 : method Runtime() not found in anonymous class of method jButton1_actionPerformed(java.awt.event.ActionEvent) at line 74, column 22

 <o:p>

 <o:p>

 <o:p>

 <o:p>


看到这段代码,认为没有发现 Runtime() ,或者没有包含 Runtime 所在的包。但实际上是 java 每个 Application 都有一个自己的 Runtime ,所以不允许显式声明和使用另外一个。其实,许多文章也都是这么介绍的。在这里必须使用 Process 来启用另外一个进程使用 Runtime 。代码示例如下:

  void jButton1_actionPerformed(ActionEvent e) {<o:p>

    //must be use a new thread.<o:p>

    Thread t = new Thread(new Runnable(){<o:p>

    public void run(){<o:p>

      try {<o:p>

        //String[] arrCommand = {"javaw", "-jar", "d:/Unicom/Salary/Salary.jar"};

              // Process p = Runtime.getRuntime().exec(arrCommand);<o:p>

        Process p = Runtime.getRuntime().exec("notepad");<o:p>

        p.waitFor();<o:p>

        System.out.println("return code: " + p.exitValue());<o:p>

      } catch (IOException e) {<o:p>

        System.err.println("IO error: " + e);<o:p>

      } catch (InterruptedException e1) {<o:p>

        System.err.println("Exception: " + e1.getMessage());<o:p>

      }<o:p>

    }<o:p>

    });<o:p>

    t.start();<o:p>

 <o:p>

  }

运行后,点击 jButton1 调用了 Windows 中的记事本应用程序。这里,新线程使用了 Runnable 接口,这是一种常用的技巧。另外,还必须要捕获 IOException InterruptedException 两个异常。对于调用带有参数的复杂程序,要使用字符串数组代替简单的字符串,我在上面的代码注释了。



无衣 2007-03-14 15:24 发表评论
分享到:
评论

相关推荐

    Java程序调用MATLAB接口

    MATLAB 生成的 JAR 包可以引入到 Java 程序中,以便在 Java 程序中调用 MATLAB 的函数和方法。下面是引入 JAR 包的步骤: 1. 根据需求搭建 SSM 2. 将 MATLAB 生成的 JAR 包引入到 Java 程序中 3. 在 Java 程序中...

    Java应用程序和java Web调用Matlab配置实例

    通过阅读和理解这份文档,你应该能成功地在Java应用程序或Web应用中调用Matlab,实现跨技术栈的协同工作。 总的来说,Java调用Matlab是一个强大且实用的技术结合,它允许开发者充分利用Matlab的计算能力,同时借助...

    java调用wps,实现word转pdf,word转图片等

    在IT行业中,集成不同软件的功能以提高效率是常见的实践。本话题主要关注如何利用Java调用WPS(金山办公软件)来实现Word到PDF的转换以及Word到图片的转换。这些功能对于处理大量文档和报告的企业尤其有用,可以自动...

    java调用window操作系统文本转语音并生成播放文件

    在Java编程环境中,调用Windows操作系统来实现文本转语音(Text-to-Speech, TTS)并生成播放文件是一项常见的需求。这项技术可以帮助开发者为应用程序添加语音合成功能,尤其适用于无障碍应用、语音助手或者多媒体...

    Java调用应用程序和Dos中的命令

    本文将详细介绍如何使用Java来调用应用程序以及如何在Windows操作系统中调用DOS命令。 #### 一、Java调用应用程序的基本概念 在Java中,`java.lang.Runtime`类提供了与当前运行时系统交互的方法,其中包括`exec()`...

    在Java程序中调用Matlab函数

    在Java程序中调用Matlab函数,介绍了在java中怎样调用matlab函数来进行矩阵的分析操作

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    java调用c c++程序实例

    本实例探讨了如何在Java中调用C/C++编写的程序,以实现两者之间的交互。 首先,Java调用C/C++程序的主要技术是通过Java Native Interface (JNI)。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。...

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

    在本场景中,用户已经提供了一个.NET的Web服务,而我们需要在Java框架中进行调用。下面将详细介绍如何实现这一过程。 首先,理解Web服务的基本概念。Web服务是一种基于网络的、标准化的接口,允许应用程序之间交换...

    Linux下Java中调用可执行程序

    在Linux环境下,Java程序可以通过Runtime类或者ProcessBuilder类来调用外部的可执行程序。这个过程通常涉及以下几个关键步骤: 1. **获取运行时环境**: 首先,你需要通过`Runtime.getRuntime()`方法创建一个...

    java jna 调用pytorch c++模型推理

    Java JNA调用PyTorch C++模型推理是一种在Java应用程序中利用PyTorch的深度学习能力的方法。JNA(Java Native Access)是Java平台上的一个库,它允许Java代码直接调用本机库(如C++编写的库),而无需编写JNI(Java ...

    Java RPC调用示例

    Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程系统具体实现的情况下调用另一个网络上的程序。在这个Java RPC调用示例中,我们将探讨RPC的基本概念、实现机制以及...

    Java调用Qt DLL

    3. **头文件和JNI函数声明**:在Java中调用C++函数前,需要创建一个C/C++的头文件,声明将要调用的Qt函数。这些函数声明必须符合JNI的约定,例如使用`JNIEXPORT`和`JNICALL`宏。 4. **JNI方法定义**:在C++代码中,...

    java 调用 odi webservice

    在本文档中,我们将通过 Java 应用程序调用 ODI webservice,实现数据的同步。首先,我们需要了解 ODI webservice 的基本概念。 ODI webservice 是 ODI 提供的一种webservice接口,允许用户通过webservice调用ODI...

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链.zip

    在Java代码中,方法调用是程序执行流程的关键部分。一个方法调用链通常表示一个方法调用另一个方法,后者可能再调用其他方法,形成一个链式结构。这种链可以帮助我们理解代码的执行流程,找出潜在的问题,例如循环...

    易语言JAVA调用 例子

    易语言JAVA调用是将Java代码与易语言程序进行交互的一种技术,这使得开发者能够利用易语言编写主程序,同时利用Java的丰富库资源。在本例子中,我们看到几个关键文件,它们分别是: 1. **Test.class**:这是一个...

    Java JNI调用IC卡读卡器

    通过以上步骤,你就可以在Java应用程序中利用JNI调用IC卡读卡器的DLL,实现读取和写入IC卡的功能。注意,调用DLL可能会涉及线程安全、错误处理以及资源管理等问题,所以在实际应用中需要仔细考虑这些因素。此外,...

    LibSVM Java API调用示例程序

    LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/8041343#comments 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例 欢迎关注我的博客...

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

    在IT行业中,尤其是在开发零售或餐饮系统的背景下,Java调用小票打印机打印购物清单是一项常见的任务。这个过程涉及到几个关键的技术点,包括打印机驱动的处理、串口通信、文本格式化以及与硬件设备的交互。以下是对...

Global site tag (gtag.js) - Google Analytics