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

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

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

    隨筆 - 1  文章 - 37  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    test

    搜索

    •  

    最新評論

    在開發(fā)一個基于Eclipse的產(chǎn)品應(yīng)用中,類似于Eclipse控制臺的小部件是必不可少的,例如:
    1. 開發(fā)過程中需要一個控制臺來專門輸出調(diào)試信息,而在產(chǎn)品發(fā)布后卻不需要
    2. 需要一個控制臺用于輸出系統(tǒng)信息
    3. 需要一個控制臺用于輸出普通消息

    先定義個簡單的接口MConsole
    public interface MConsole {
        
        
    public MessageConsole getMessageConsole();
        
        
    public void println(String msg);

    }


    MConsoleFactory 還是需要的,就像Log4j的Logger一樣,要控制臺的時候,只需要來一條如下語句就可以了
    private static final MConsole mConsole = MConsoleFactory.CONSOLE_SYSTEM;

    public class MConsoleFactory {

        
    public static final MConsole CONSOLE_MESSAGE = new AbstractMConsole(
                
    new MessageConsole("控制臺"null));
        
    public static final MConsole CONSOLE_SYSTEM = new AbstractMConsole(
                
    new MessageConsole("控制臺"null));
        
    public static final MConsole DEBUG_SYSTEM = new AbstractMConsole(
                
    new MessageConsole("控制臺"null));

        
    static{
            
    {

                IConsoleManager manager 
    = ConsolePlugin.getDefault()
                        .getConsoleManager();
                
    // IConsole[] existing = manager.getConsoles();
                manager.addConsoles(new IConsole[] {
                        CONSOLE_SYSTEM.getMessageConsole(),
                        CONSOLE_MESSAGE.getMessageConsole(),
                        DEBUG_SYSTEM.getMessageConsole() }
    );

            }

        }


        
    private MConsoleFactory() {
        }

    }

    接下來就是AbstractMConsole了
    class AbstractMConsole implements MConsole {
        
        
    private MessageConsole console;
        
        
    private MessageConsoleStream stream= null;
        
        
    public AbstractMConsole(MessageConsole console){
            
    this.console = console;
            
    this.stream = console.newMessageStream();
        }

        
        
    /**
         * 這個MessageConsole應(yīng)該避免暴露
         
    */

        
    public MessageConsole getMessageConsole(){
            
    return this.console;
        }

        
    /**
         * 這里的println有很大的發(fā)揮空間
         
    */

        
    public void println(String msg){
            StringBuffer sb 
    = new StringBuffer();
            sb.append(
    new SimpleDateFormat("[HH:mm:ss]").format(new Date()));
            sb.append(msg);
            
    this.stream.println(sb.toString());
        }


    }

    上面3個部分只是在MConsoleFactory中加入了3個MessageConsole,下面的代碼就是具體的部分了
    先看看[系統(tǒng)消息控制臺]

    public class ConsoleView extends ViewPart {

        
    public static final String ID = "donf.yang.mir3g.ui.view.consoleView";

        
    public ConsoleView() {
        }


        @Override
        
    public void createPartControl(Composite parent) {
            MessageConsole mainConsole 
    = MConsoleFactory.CONSOLE_SYSTEM
                    .getMessageConsole();
            
    final TextConsoleViewer tcv = new TextConsoleViewer(parent, mainConsole);
            
    /* 如果這個console不是在第一個lab,當切換到該lab時,如果要自動滾屏到最后一條輸出,需要加下面這行 */
            toTopIndex(tcv);
            tcv.addTextListener(
    new ITextListener() {
                
    public void textChanged(TextEvent event) {
                    toTopIndex(tcv);
                }

            }
    );

            
    /**
             * 下面2行注釋的代碼也是與上面的toTopIndex具有相同的功效, 只是看起來有點別扭,因為會延遲50毫秒,具體請參照Eclipse的代碼
             
    */

            
    // IOConsoleViewer iov = new IOConsoleViewer(parent,mainConsole);
            
    // iov.setAutoScroll(true);
        }


        
    /**
         * 自動滾屏
         * 
         * 
    @param tcv
         
    */

        
    private void toTopIndex(final TextConsoleViewer tcv) {
            StyledText textWidget 
    = tcv.getTextWidget();
            
    if (textWidget != null && !textWidget.isDisposed()) {
                
    int lineCount = textWidget.getLineCount();
                tcv.setTopIndex(lineCount 
    - 1);
            }

        }


        @Override
        
    public void setFocus() {
        }


        
    /**
         * 這個才是控制臺的名字
         
    */

        
    public String getPartName() {
            
    return "系統(tǒng)消息";
        }


    }

    其他2個View也是這樣的代碼了,只是名字不同

    這樣設(shè)計出來的控制臺有較好的擴展性,耦合度也較低,至于Log4的應(yīng)用需要在createPartControl中加入如下代碼

    MessageConsoleStream stream = mainConsole.newMessageStream();
            System.setOut(
    new PrintStream(stream));
            
    try {
                Properties props 
    = new Properties();
                props.load(
    this.getClass().getResourceAsStream("/log4j.properties"));
                PropertyConfigurator.configure(props);
            }
     catch (Exception e) {

            }

    posted on 2008-06-10 11:20 Phrancol Yang 閱讀(1264) 評論(2)  編輯  收藏 所屬分類: Eclipse

    FeedBack:
    # re: [原]Eclipse產(chǎn)品應(yīng)用——控制臺的使用 2008-07-03 10:21 冰河の泥魚
    如果代碼全一些就會更好了.發(fā)現(xiàn)MessageConsole這個類沒有.  回復(fù)  更多評論
      
    # re: [原]Eclipse產(chǎn)品應(yīng)用——控制臺的使用 2008-07-03 10:23 冰河の泥魚
    哈,找到了.  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费一看一级毛片人| 黄色网址免费在线| 久久91亚洲精品中文字幕| 国产精品黄页在线播放免费| 99视频在线免费| 中文字幕免费不卡二区| 国产亚洲综合视频| 精品亚洲成A人无码成A在线观看| 亚洲成a人片在线观看无码| 亚洲黄片手机免费观看| 四虎影视永久免费观看| 成年男女男精品免费视频网站| 久久这里只精品99re免费 | 成人免费毛片内射美女-百度| 成人精品一区二区三区不卡免费看| 水蜜桃视频在线观看免费| 亚洲成AV人影片在线观看| 亚洲精品福利你懂| 久久综合亚洲鲁鲁五月天| 亚洲av无码不卡一区二区三区| 中文字幕亚洲乱码熟女一区二区| 免费一级做a爰片性色毛片| 免费va人成视频网站全| 国产美女无遮挡免费视频网站 | 亚洲国产成人久久| 亚洲网红精品大秀在线观看| 亚洲国产精品嫩草影院在线观看 | avtt天堂网手机版亚洲| 亚洲日本国产精华液| 亚洲日本乱码一区二区在线二产线| 亚洲大尺度无码无码专区| 久久精品国产亚洲AV网站| 亚洲国产精华液网站w| 亚洲精品无码不卡在线播HE | 久久成人18免费网站| 九九99热免费最新版| a级片在线免费看| 美女内射无套日韩免费播放| 99ee6热久久免费精品6| 国产福利在线观看免费第一福利| 99在线视频免费观看视频|