eclipse-向Console控制臺輸出信息

首先這里主要用到的是org.eclipse.ui.console這個包,所以現在順道先來了解一下:

org.eclipse.ui.console是一個可擴展的console視圖插件,利用它可以實現各種console,并把它們顯示出來。該插件本身就實現了一個Message Console,對于只需要進行消息輸出的RCP應用來說,其功能已經足夠:

  • 調用ConsolePlugin.getDefault().getConsoleManager()得到一個IConsoleManager引用
  • 創建所需的MessageConsole,并把它(們)加入到上一步得到的Console Manager里
  • 調用MessageConsole.newMessageStream()得到連接這個Console的輸出流(MessageConsoleStream)
  • 通過MessageConsoleStream的print,println方法進行消息的輸出。當然需要把Console View打開才能看到輸出,可以利用Window/Show View來打開,或者把該View在放到自己實現的Perspective的初始布局中

下面簡要列舉其設計及實現要點:

  • 作為一個通用的console及其顯示的框架,org.eclipse.ui.console定義了以下幾個接口:
    • IConsole. 代表一個Console,主要方法是createPage,用來創建該Console在Console View中的分頁
    • IConsole Manager. 代表一個Console Manager,對Console進行管理
    • IConsoleListener. 代表一個Console Listener,當Console被加進Console Manager中或從中刪除時會得到通知
    • IConsoleView. 代表Console View,用來顯示各個Console
  • org.eclipse.ui.console 本身實現了一個Console View,通過在org.eclipse.ui.views擴展點上擴展的方式。該實現已經相當一般化,一般情況下是不需要實現自己的Console View的.它的實現類是ConsoleView,是一個 PageBookView,每個Console以一個Page的方式呈現,效果就是我們在eclipse里看到的那個Console標簽頁。
  • Console 和PageBookView Page的關系。簡言之,就是MVC中Model和View的關系,Model是Console,Page負責把它顯示出來。對于TextConsole 和TextConsolePage,這種Model-View關系是通過TextConsole和(TextConsolePage所關聯的)TextConsoleViewer之間的 Model-View關系來實現的,如圖所示。再看TextConsole和TextConsoleViewer的Model-View關系的實現:TextConsole關聯一個 ConsoleDocument,實現了IDoucment接口,而 TextConsoleViewer是一個TextViewer,在其構造函數中設置其Document為TextConsole關聯的 Document(ConsoleDocument),由此可以看出,TextConsole和TextConsolePage之間的Model-View關系最終還是由jface text框架的IDocument和TextViewer之間的Model-View 關系來實現的。Console和其Page的關系是通過IConsole的createPage方法來建立的,比如,TextConsole的 createPage創建的TextConsolePage對象保存了相應TextConsole對象的引用;對于MessageConsole來說,由于它沒有覆蓋IOConsole的createPage方法,因此創建的是一個IOConsolePage對象, 該IOConsolePage對象保存的雖然是一個TextConsole引用,但其實際類型是MessageConsole。
  • 當向第1步得到的Console Manager里加Console時,如果此時ConsoleView已經實例化,則它會是該Console Manager 的一個Console Listener,因此會受到consolesAdded的事件通知,ConsoleView對此事件的處理是調用相應 Console的createPage方法創建一個IPageBookViewPage并顯示它。如果ConsoleView是以后實例化的,則它實例化時會從Console Manager取到當前在Console Manager中的所有Console,對每個Console創建一個 IPageBookViewPage。
  • MessgaeConsole是一個IOConsole,IOConsole用于顯示I/O流里的Text;而IOConsole又是一個TextConsole,TextConsole是一個抽象的文本Console,支持正則表達式匹配和超級鏈接,它包含一個Document,概念上就是 jface text框架中的文檔概念,其實現類是ConsoleDocument。MessageConsole.createPage返回的實際上是一個 IOConsolePage,其createControl方法的實現創建了一個IOConsoleViewer,該viewer是jface text框架的TextViewer,其Document被設置為這個MessageConsole的Document,因此當MessageConsole的 Document改變時, 其Page上的TextViewer將反映該變化。
  • IOConsole關聯一個Doucment Partitioner(IConsoleDocumentPartitioner),該接口擴展自jface text框架中的 IDocumentPartitioner,其實現類是IOConsolePartitioner.當通過MessageConsoleStream往 MessageConsole上輸出消息時,消息實際進入了這個IOConsolePartitioner內部保存的一個消息列表里。IOConsolePartitioner里實現了一個Job Scheduling,其效果就是不斷檢查該消息列表,把其中的消息添加到MessageConsole的Document的末尾,當然這個工作是在另外的 線程中作的。此時如果ConsoleView已實例化,則該MessageConsole會和其Page上IOConsoleViewer相關聯,因此消息便能在該Console的Page中顯示出來了。

添加依賴:

	MessageConsole console = null;MessageConsoleStream consoleStream = null;IConsoleManager consoleManager = null;final String CONSOLE_NAME = "naonConsole";private void initConsole() {consoleManager = ConsolePlugin.getDefault().getConsoleManager();IConsole[] consoles = consoleManager.getConsoles();if (consoles.length > 0) {System.out.println("consoles.length > 0");console = (MessageConsole) consoles[0];} else{System.out.println("consoles.length = 0,new MessageConsole");console = new MessageConsole(CONSOLE_NAME, null);consoleManager.addConsoles(new IConsole[] { console });}consoleStream = console.newMessageStream();}/*** 開啟console, 打印相關消息* @param message 消息內容*/public void printMessage(String message) {if (message != null) {if (console == null) {initConsole();}// 顯示Console視圖consoleManager.showConsoleView(console);// 打印消息consoleStream.print(message + "\n");}}
帶顏色的:private void initConsole() {consoleManager = ConsolePlugin.getDefault().getConsoleManager();IConsole[] consoles = consoleManager.getConsoles();if (consoles.length > 0) {System.out.println("consoles.length > 0");console = (MessageConsole) consoles[0];} else{System.out.println("consoles.length = 0,new MessageConsole");console = new MessageConsole(CONSOLE_NAME, null);consoleManager.addConsoles(new IConsole[] { console });}consoleStream = console.newMessageStream();Display display = Display.getCurrent();  consoleStream.setColor(display.getSystemColor(SWT.COLOR_RED)); }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21589.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

本地 Java API 訪問云上 HDFS 集群的問題與解決

前言 這篇文章默認是已經在云上配置好了 Haoop 集群,因此本文主要是記錄一些可能會出現錯誤的地方。 如果還不會配置 Hadoop 集群,那么可以參考本專欄的另一篇文章:云上配置 Hadoop 集群詳解 另外在進行本文的學習之前也建議先看看該文章&…

邊緣計算的AI小板——OrangePi AI Pro

簡介 OrangePi AI Pro是一款基于Allwinner H6處理器的嵌入式AI計算設備,適用于物聯網和邊緣計算。它具有強大的性能、低功耗、多接口和小尺寸。 本文分為三個部分: 一、對該板進行簡單的開箱介紹。 二、 將SD卡中的系統遷移到由于該板支持SD卡、SSD…

必看——怎么讓網站實現HTTPS訪問?

讓網站實現HTTPS訪問的步驟可以簡化為以下幾個基本步驟,非常適合非技術背景人士理解: 1. 申請SSL證書: - SSL證書是實現HTTPS的關鍵,它能加密網站數據,保證用戶信息的安全。你可以從一些提供免費SSL證書的機構&#xf…

Spring boot集成mybatis

Spring boot集成mybatis maven依賴 我的spring boot版本是2.5.0&#xff0c;集成mybatis&#xff0c;首先需要數據庫的支持&#xff0c;這里我選擇mysql數據庫&#xff0c;版本是8.0.11&#xff0c;然后使用druid連接池&#xff0c;其次就需要加上mybatis的依賴。 <!--mys…

[ue5]建模場景學習筆記(2)——用vectornoise降低重復率

1.問題分析&#xff1a; 利用改uv的方式降低重復率并不理想&#xff0c;在一定程度上的確能夠達到降低重復率的效果&#xff0c;但遠看仍然有較清晰的重復效果&#xff0c;嘗試優化一下。 2.操作實現&#xff1a; 1.首先先看一下修改后的效果&#xff1a; 這是未修改前&#…

centos打包離線phtone3安裝包rpm

在有網絡的環境中&#xff0c;下載Python3的RPM包及其所有依賴。 打包離線phtone3安裝包centos7rmp # 安裝 yum-utils&#xff0c;這個包包含了 yumdownloader yum install yum-utils # 創建一個目錄來保存下載的RPM包 mkdir python3-rpms # 下載Python3及其所有依賴 yu…

「前端+鴻蒙」核心技術HTML5+CSS3(八)

1、網站布局詳解 網站布局是前端開發中的核心概念之一,它決定了網頁的視覺結構和用戶瀏覽的邏輯順序。以下是幾種常見的布局方式及其代碼示例: 固定布局: 固定布局通常具有固定的寬度和高度,適用于傳統的桌面視圖。 <!DOCTYPE html> <html> <head><…

【Web API DOM02】如何獲取、操作DOM元素

一&#xff1a;獲取DOM元素 1 根據CSS選擇器獲取 語法格式如下&#xff1a; &#xff08;1&#xff09;選中一個DOM元素 document.querySeletor(CSS選擇器) <ul><li>1</li><li>2</li><li>3</li> </ul> document.querySel…

Github上一款開源、簡潔、強大的任務管理工具:Condution

Condution 是一款開源任務管理工具&#xff0c;它以簡潔易用、功能強大著稱。它旨在為用戶提供一個簡單高效的平臺&#xff0c;幫助他們管理日常任務、提高工作效率。 1. Condution 的誕生背景 現如今&#xff0c;市面上存在著許多任務管理軟件&#xff0c;但它們往往價格昂貴…

如何不用口吐蓮花,照樣成為社交達人

一、教程描述 每個人的一生&#xff0c;70%的時候都在溝通&#xff0c;與老板溝通、與家人溝通、與朋友溝通、與陌生人溝通&#xff0c;等等&#xff0c;但是你真的會溝通么&#xff1f;不論是工作上跟上司、同事和客戶間的溝通&#xff0c;還是生活中與家人、朋友、伴侶間的溝…

[ICPC2024 Xi‘an I] ICPC2024 邀請賽西安站(7/8/13)

心得 [ICPC2024 Xian I] ICPC2024 邀請賽西安站重現賽 - 比賽詳情 - 洛谷 7表示賽時ac了7個&#xff0c;8表示含補題總共ac數&#xff0c;13表示題目總數 題目 M. Chained Lights 打表&#xff0c;發現只有k1是YES //#include <bits/stdc.h> #include<iostream&…

Mysql 技術實戰篇

命令行 導出 - -h localhost&#xff1a;指定MySQL服務器的主機地址為本地主機。如果MySQL服務器在其他主機上&#xff0c;請將localhost替換為相應的主機地址。 - -u username&#xff1a;指定連接MySQL服務器的用戶名。將username替換為您的有效用戶名。 - -p&#xff1a;提…

Makefile教程(附通用模板)

工程目錄 工程目錄如圖&#xff0c;build文件夾是編譯出來的 . ├── app │ ├── imx6ul.lds │ ├── main.c │ ├── makefile │ └── start.S ├── bsp │ ├── clk │ │ ├── bsp_clk.c │ │ └── bsp_clk.h │ ├── delay │…

軟考 系統架構設計師系列知識點之SOME/IP與DDS(1)

本文內容參考&#xff1a; 車載以太網 - SOME/IP簡介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 詳解系列&#xff08;1&#xff09;—— 概述_some ip-CSDN博客 深入淺出SOME/IP協議&#xff1a;基本概念和原理-…

天童教育:停止內耗放松身心

如果一個人經常從自己身上找原因&#xff0c;經常攬下他人的過錯的責任&#xff0c;總是自我懷疑自我否定&#xff0c;認為自己不值得被愛。當被人誤解時會在心里悄悄附和&#xff0c;責怪自己。缺乏自信&#xff0c;沒辦法和他人有正常的交往&#xff0c;長期處于身心疲憊的狀…

Python與Python3的區別:深度剖析與全面解讀

Python與Python3的區別&#xff1a;深度剖析與全面解讀 在編程領域&#xff0c;Python和Python3是兩個常被提及的版本&#xff0c;它們之間既存在相似之處&#xff0c;又有著顯著的區別。本文將從四個方面、五個方面、六個方面和七個方面&#xff0c;深入剖析Python與Python3之…

OJ3376無盡的石頭問題

答案&#xff1a; #include<bits/stdc.h> using namespace std; const int N10e7; int fx(int n) {int sum0;while(n){sum(n%10);n/10;}return sum; } int main() {int t,n,x;cin>>t;while(t--){cin>>n;int count0;for(int i1;i<N;){if(in){cout<<…

在github上創建(上傳、關聯)自已的項目

目錄 創建一個github項目并進行開發。 1.github創建空項目 2. git clone 項目 3. 將項目關聯 創建一個github項目并進行開發。 1.github創建空項目 右邊的New 然后按步創建就行 2. git clone 項目 復制這個連接 然后在終端&#xff1a;git clone [剛才復制的連接] 3. 將…

解讀 Explainable Image Similarity Integrating Siamese Networks and Grad-CAM

給出論文&#xff08;Explainable Image Similarity Integrating Siamese Networks and Grad-CAM&#xff09;的內容解讀、代碼運行說明 論文鏈接&#xff1a;J. Imaging | Free Full-Text | Explainable Image Similarity: Integrating Siamese Networks and Grad-CAM (mdpi.c…

純網絡的系統能否定級備案?

很多單位想把網絡基礎設施進行定級備案和測評&#xff0c;但是不知道這樣可否&#xff1f; 目前湖北省是可以的。因為根據《定級指南》的術語解釋3.2對等級保護對象的定義是包括通信基礎設施的&#xff0c;也就是網絡基礎設施。其他地區目前有的地方可以有的地方不行&#xff…