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

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

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

    閑云無衣
    無衣的筆記

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

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

    import java.lang.*;

    ?

    public class runProg{

    public static void main(String[] args){

    ?????? try{

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

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

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

    }

    }

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?


    在命令符下編譯運行,直接調用了記事本應用程序,沒有任何問題。

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

    ? void jButton1_actionPerformed(ActionEvent e) {

    ??? // 下是解答代碼

    try{

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

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

    ??? }catch(Exception e){

    }

    // 上是解答代碼

    ? }

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?


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

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

    ?

    ?

    ?

    ?


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

    ? 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();

    ?

    ? }

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

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

    ?

    ?

    ?

    ?


    看到這段代碼,認為沒有發現 Runtime() ,或者沒有包含 Runtime 所在的包。但實際上是 java 每個 Application 都有一個自己的 Runtime ,所以不允許顯式聲明和使用另外一個。其實,許多文章也都是這么介紹的。在這里必須使用 Process 來啟用另外一個進程使用 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();

    ?

    ? }

    運行后,點擊 jButton1 調用了 Windows 中的記事本應用程序。這里,新線程使用了 Runnable 接口,這是一種常用的技巧。另外,還必須要捕獲 IOException InterruptedException 兩個異常。對于調用帶有參數的復雜程序,要使用字符串數組代替簡單的字符串,我在上面的代碼注釋了。

    posted on 2007-03-14 15:24 無衣 閱讀(734) 評論(1)  編輯  收藏 所屬分類: Java
     
    主站蜘蛛池模板: 阿v视频免费在线观看| 免费人人潮人人爽一区二区| 国产情侣久久久久aⅴ免费| 久久久久亚洲AV无码专区网站| 老妇激情毛片免费| 亚洲精品亚洲人成在线观看下载| 一级看片免费视频| 亚洲国产一区视频| 久久久免费观成人影院| 亚洲精品无码mv在线观看网站| 免费国产午夜高清在线视频| 亚洲一区二区中文| 国产片AV片永久免费观看| 色天使亚洲综合在线观看| 日本特黄a级高清免费大片| 精品在线视频免费| 亚洲熟妇丰满多毛XXXX| 久久精品一区二区免费看| 亚洲精品午夜视频| 免费网站看v片在线香蕉| 亚洲日韩在线观看免费视频| 情人伊人久久综合亚洲| 国产免费看JIZZ视频| 色噜噜狠狠色综合免费视频| 亚洲国产无套无码av电影| 永久免费在线观看视频| 亚洲另类自拍丝袜第五页| 国产成人精品亚洲精品| 天天影视色香欲综合免费| 亚洲av永久无码天堂网| 国产亚洲精品岁国产微拍精品| 91福利免费视频| 久久亚洲精品成人无码| 亚洲中文字幕无码中文字在线| 91精品成人免费国产片| 国产成人久久精品亚洲小说| 精品亚洲综合在线第一区| 免费国产作爱视频网站| 免费视频精品一区二区| 亚洲狠狠狠一区二区三区| 亚洲第一网站男人都懂|