<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑云無(wú)衣
    無(wú)衣的筆記

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

    前一段時(shí)間看了《程序員》第 3 Java 專家門診中怎樣調(diào)用其它的程序,我把其解答代碼放到一個(gè)程序中,如下示:

    import java.lang.*;

    ?

    public class runProg{

    public static void main(String[] args){

    ?????? try{

    ?????? ? Runtime rt=Runtime.getRuntime();

    ?????? ? rt.exec("NotePad");

    ?????? }catch(Exception e){}

    }

    }

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?


    在命令符下編譯運(yùn)行,直接調(diào)用了記事本應(yīng)用程序,沒(méi)有任何問(wèn)題。

    但在圖形用戶的應(yīng)用程序中,就不能編譯,代碼示例如下:

    ? void jButton1_actionPerformed(ActionEvent e) {

    ??? // 下是解答代碼

    try{

    ?????? Runtime rt=Runtime.getRuntime();

    ?????? rt.exec("NotePad");

    ??? }catch(Exception e){

    }

    // 上是解答代碼

    ? }

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?


    就上面的代碼而言,只是說(shuō)明了調(diào)用其它程序的基本方法,但是這段代碼根本不能被編譯過(guò)去,在 Jbuilder 中的編譯錯(cuò)誤如下:

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

    ?

    ?

    ?

    ?


    看到這個(gè)編譯錯(cuò)誤也許認(rèn)為是按鈕的事件定義錯(cuò)誤,實(shí)際上是 AWT Component 的事件是線程安全級(jí)的,不允許直接使用另外進(jìn)程或線程,因 Swing 中的組件是從 AWT 中繼承來(lái)的,所以也不允許直接使用。解決辦法只有使用一個(gè)新線程。代碼如下示:

    ? void jButton1_actionPerformed(ActionEvent e) {

    ??? //must be use a new thread.

    ??? Thread t = new Thread(new Runnable(){

    ??? public void run(){

    ? ???? try {

    ??????? Runtime rt = Runtime().getRuntime();

    ??????? rt.exec(“notepad”);

    ??????? } catch (IOException e) {

    ??????? System.err.println("IO error: " + e);

    ????? }

    ? ??}

    ??? });

    ??? t.start();

    ?

    ? }

    但是這段代碼還是不能被編譯,錯(cuò)誤提示如下:

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

    ?

    ?

    ?

    ?


    看到這段代碼,認(rèn)為沒(méi)有發(fā)現(xiàn) Runtime() ,或者沒(méi)有包含 Runtime 所在的包。但實(shí)際上是 java 每個(gè) Application 都有一個(gè)自己的 Runtime ,所以不允許顯式聲明和使用另外一個(gè)。其實(shí),許多文章也都是這么介紹的。在這里必須使用 Process 來(lái)啟用另外一個(gè)進(jìn)程使用 Runtime 。代碼示例如下:

    ? void jButton1_actionPerformed(ActionEvent e) {

    ??? //must be use a new thread.

    ??? Thread t = new Thread(new Runnable(){

    ??? public void run(){

    ????? try {

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

    ????????????? // Process p = Runtime.getRuntime().exec(arrCommand);

    ??????? Process p = Runtime.getRuntime().exec("notepad");

    ??????? p.waitFor();

    ??????? System.out.println("return code: " + p.exitValue());

    ????? } catch (IOException e) {

    ??????? System.err.println("IO error: " + e);

    ????? } catch (InterruptedException e1) {

    ????? ??System.err.println("Exception: " + e1.getMessage());

    ????? }

    ??? }

    ??? });

    ??? t.start();

    ?

    ? }

    運(yùn)行后,點(diǎn)擊 jButton1 調(diào)用了 Windows 中的記事本應(yīng)用程序。這里,新線程使用了 Runnable 接口,這是一種常用的技巧。另外,還必須要捕獲 IOException InterruptedException 兩個(gè)異常。對(duì)于調(diào)用帶有參數(shù)的復(fù)雜程序,要使用字符串?dāng)?shù)組代替簡(jiǎn)單的字符串,我在上面的代碼注釋了。

    posted on 2007-03-14 15:24 無(wú)衣 閱讀(738) 評(píng)論(1)  編輯  收藏 所屬分類: Java
     
    主站蜘蛛池模板: 精选影视免费在线 | 国产综合激情在线亚洲第一页 | 国产一级淫片视频免费看| 久久久久久久尹人综合网亚洲| 亚洲中文字幕无码爆乳AV| 亚洲精品私拍国产福利在线| 亚洲精品国产精品| 亚洲免费人成视频观看| caoporn成人免费公开| 中文字幕无码播放免费| 亚洲中文字幕无码一区二区三区| 亚洲精华国产精华精华液好用 | 亚洲AV无码一区二区乱子伦| 国产成人精品亚洲一区| 亚洲一区二区免费视频| 亚洲精品高清国产一线久久| 美美女高清毛片视频黄的一免费 | 亚洲色大18成人网站WWW在线播放| 你是我的城池营垒免费观看完整版| 国产精品国产免费无码专区不卡| 亚洲网红精品大秀在线观看| 日产久久强奸免费的看| 免费黄色app网站| 亚洲啪啪免费视频| jjizz全部免费看片| 亚洲狠狠综合久久| 久久国产色AV免费看| 国产亚洲人成网站在线观看不卡 | 国产精品免费一区二区三区四区| 婷婷综合缴情亚洲狠狠尤物| 国产一级大片免费看| 国产免费不卡v片在线观看| 在免费jizzjizz在线播| 久久国产高潮流白浆免费观看| 99视频在线观看免费| 精品一区二区三区免费观看| 国产在线一区二区综合免费视频| 国产午夜无码精品免费看| 欧洲人免费视频网站在线| 久久久精品免费视频| 国产成人免费在线|