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

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

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

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統計

    積分與排名

    friends

    link

    最新評論

    把控制臺重定向到GUI組件上(轉)

    最近為一個項目的服務器的做一個界面的時候,為了能把原來在后臺打印出來的相關信息重定向到GUI界面的時候,費了一些心思。都是以前在實現的時候大多數信息的打印和測試時使用的都是System.out和System.err之類,圖個方便,沒有使用log功能。當然這是個不好的習慣。
       剛開始的時候用Swing做了一個面板,采用JTextPane組件作為打印信息的容器??赡苁翘脹]有用Swing了,在測試的時候這個東西的水平滑動塊老是隨著信息的顯示自動地滑向最后的地方,而且打印信息看起來很凌亂。后來就換用SWT,把打印的信息容器換用Text組件,把樣式定義為SWT.MULT | SWT.V_SCROLL | SWT.WRAP ,讓它可以自動換行。
       查一下JDK的API文檔,System類提供了可以重定向的方法setOut(PrintStream out)、setErr(PrintStream err)、setIn(InputStream in)。在此我們只需求使用setOut和setErr就夠了,這二個方法都要傳入一個PrintStream類型的參數,只要在調用打印信息的前面調用這二個方法重設輸出流和錯誤流就可以達到我們的目的。那么我們繼承PrintStream類,并把要顯示信息的組件作為參數傳入到這個自定義的打印流類中。
     1public class MyPrintStream extends PrintStream {
     2
     3    private Text text;
     4    
     5    public MyPrintStream(OutputStream out, Text text) {
     6        super(out);
     7        this.text = text;
     8    }

     9
    10    /**
    11     * 在這里重截,所有的打印方法都要調用的方法
    12     */

    13    public void write(byte[] buf, int off, int len) {
    14        final String message = new String(buf, off, len);
    15        
    16        /* SWT非界面線程訪問組件的方式 */
    17        Display.getDefault().syncExec(new Thread(){
    18            public void run(){
    19                /* 在這里把信息添加到組件中 */
    20                text.append(message);
    21            }

    22        }
    );
    23    }

    24    
    25}

    把組件作為參數傳入到這個打印流中,并重寫父類的write(byte[] buf, int off, int len)方法,把寫出的信息添加到組件上,注意到重載了帶OutputStream的構造方法。
       這里有二點必須注意,確保組件在調用打印信息添加前是已經被正確創建的,另外必須注冊不同GUI組件對線程的訪問形式,像上面的SWT就對界面的訪問有嚴格的規定。
       完成了PrintStream后,下面是如何使用,在我們啟動界面后,使用下面的方式:
    1MyPrintStream mps = new MyPrintStream(System.out, text);
    2        System.setOut(mps);
    3        System.setErr(mps);

    ,這樣就可以把原來程序里的所有System.out和System.err信息轉移到你的GUI界面上。

    posted on 2007-10-31 09:04 liaojiyong 閱讀(915) 評論(0)  編輯  收藏 所屬分類: Eclipse

    主站蜘蛛池模板: 亚洲国产日韩一区高清在线| 亚洲αv在线精品糸列| 亚洲精品456播放| 一级做α爱过程免费视频| 一个人晚上在线观看的免费视频| 国产在线观看无码免费视频| 十八禁无码免费网站| 日韩毛片免费无码无毒视频观看 | 2019中文字幕在线电影免费 | 巨胸喷奶水视频www免费视频| 久久国产乱子免费精品| 黄瓜视频影院在线观看免费| 国产a级特黄的片子视频免费| 日韩精品亚洲aⅴ在线影院| 1区1区3区4区产品亚洲| 亚洲免费综合色在线视频| 天天爽亚洲中文字幕| 免费人成网站永久| 久久精品国产大片免费观看| 女性无套免费网站在线看| 久久久精品国产亚洲成人满18免费网站| 亚洲av日韩av高潮潮喷无码| 亚洲乱亚洲乱妇无码| 女人隐私秘视频黄www免费| 欧洲精品成人免费视频在线观看 | 天天拍拍天天爽免费视频| 青青草原亚洲视频| 亚洲伊人久久大香线蕉| 人成电影网在线观看免费| 久久国产免费福利永久| 亚洲综合色视频在线观看| 亚洲精品无码Av人在线观看国产| 亚洲国产成人久久| 国产精品免费久久久久久久久| 美女视频黄免费亚洲| 奇米影视亚洲春色| 亚洲精品无码你懂的| 日韩免费人妻AV无码专区蜜桃 | 亚洲午夜在线播放| 中文字幕乱码系列免费| 大陆一级毛片免费视频观看i|