`

Eclipse插件:如何输出字符串到控制台

    博客分类:
  • Java
阅读更多

首先定义一个控制台类(继承自MessageConsole),以及一个输出带链接的字符串的帮助类。

 

package com.shansun.easycmd.controls;

import java.io.IOException;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;

public class MavenConsole extends MessageConsole {

	final public static String MAVEN_CONSOLE_NAME = "Maven Tools";

	int addStrLen;

	static class DocChangeListener implements IDocumentListener {

		int lenBeforeChange;

		int expectedlen;

		final MavenConsole mvnConsole;

		final MavenHyperLink mvnLink;

		public DocChangeListener(MavenConsole console, MavenHyperLink link, int lenWanted) {
			mvnConsole = console;
			mvnLink = link;
			expectedlen = lenWanted;
		}

		public void documentAboutToBeChanged(DocumentEvent event) {}

		public void documentChanged(final DocumentEvent event) {
			int strLenAfterChange = event.getDocument().getLength();
			if (strLenAfterChange >= expectedlen) {
				Job job = new Job("MavenMessageConsole.addLinkToConsole") {
					public IStatus run(IProgressMonitor monitor) {
						try {
							mvnConsole.addHyperlink(mvnLink, expectedlen - mvnLink.getText().length(), mvnLink.getText().length());
						} catch (Exception e) {}

						return Status.OK_STATUS;
					}
				};
				job.schedule();
				event.getDocument().removeDocumentListener(this);
			}
		}
	}

	public MavenConsole() {
		super(MAVEN_CONSOLE_NAME, null);
		addStrLen = 0;
	}

	public void clearConsole() {
		super.clearConsole();
		this.addStrLen = 0;
	}

	public void printToConsole(final String msg, final Color color) {
		final MessageConsoleStream stream = this.newMessageStream();
		this.activate();
		if (color != null) stream.setColor(color);
		addStrLen += msg.length();
		stream.println(msg); // "\n" will take length 1, so use print, not println
		try {
	        stream.flush();
        } catch (IOException e) {
	        e.printStackTrace();
        }
	}

	public void addLinkToConsole(final MavenHyperLink link, Color color) {
		if (link.valid()) {
			try {
				final MavenConsole console = this;
				final int currentStrLen = addStrLen;
				printToConsole(link.getText(), color);
				console.getDocument().addDocumentListener(new DocChangeListener(console, link, currentStrLen + link.getText().length()));

			} catch (Exception e) {}
		}
	}

	public static MavenConsole getMavenConsole() {
		IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
		IConsole[] curConsoles = manager.getConsoles();
		for (IConsole co : curConsoles) {
			if (co.getName().equals(MAVEN_CONSOLE_NAME))
			    return (MavenConsole) co;
		}
		MavenConsole myConsole = new MavenConsole();
		manager.addConsoles(new IConsole[] { myConsole });
		return myConsole;
	}
}

 

package com.shansun.easycmd.controls;

import java.net.URL;

import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IHyperlink;

public class MavenHyperLink implements IHyperlink {

	String text;

	URL url;

	public MavenHyperLink(String text, String urlStr) {
		try {
			this.text = text;
			this.url = new URL(urlStr);
		} catch (Exception e) {
			this.url = null;
		}
	}

	public boolean valid() {
		return this.text != null && this.url != null;
	}

	public String getText() {
		return this.text;
	}

	public void linkActivated() {
		try {
			if (url != null)
			    PlatformUI.getWorkbench().getBrowserSupport().createBrowser("TestConsole").openURL(url);
		} catch (Exception e) {}
	}

	public void linkEntered() {}

	public void linkExited() {}

}

 下面介绍如何在代码中使用这两个类:

private void doMavenInWindows(boolean isDir, String osPath) {
		final Color colorBlue = Display.getDefault().getSystemColor(SWT.COLOR_BLUE);
		Color colorRed = Display.getDefault().getSystemColor(SWT.COLOR_RED);
		Color colorBlack = Display.getDefault().getSystemColor(SWT.COLOR_BLACK);

		final MavenConsole myConsole = MavenConsole.getMavenConsole();
		myConsole.printToConsole(osPath, colorBlue);
		try {
			final String mavenExePath = Activator.getMavenExe();
			if (mavenExePath == null) return;
			try {
				myConsole.clearConsole();
				myConsole.setBackground(colorBlack);
				String cmd = mavenExePath + " clean deploy -Dmaven.test.skip=true";
				Process proc = null;
				if (isDir) {
					proc = Runtime.getRuntime().exec(cmd, null, new File(osPath));
				} else {
					int index1 = osPath.lastIndexOf('/');
					int index2 = osPath.lastIndexOf('\\');
					int index = Math.max(index1, index2);
					String realPath = osPath.substring(0, index);
					proc = Runtime.getRuntime().exec(cmd, null, new File(realPath));
				}
				InputStream is = proc.getInputStream();
				InputStreamReader isr = new InputStreamReader(is, "GBK");
				final BufferedReader br = new BufferedReader(isr);
				myConsole.printToConsole("Maven Tools v1.0, Made By Lanbo.xj", colorRed);
				Job job = new Job("MavenMessageConsole.addLinkToConsole") {
					public IStatus run(IProgressMonitor monitor) {
						String line = null;
						try {
							while ((line = br.readLine()) != null) {
								final String tmpLine = line;
								myConsole.printToConsole(tmpLine, colorBlue);
							}
							return Status.OK_STATUS;
						} catch (IOException e) {
							e.printStackTrace();
						}
						return Status.CANCEL_STATUS;
					}
				};
				job.schedule();
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 

 

分享到:
评论

相关推荐

    eclipse帮助文档

    以上只是Eclipse众多功能的一部分,实际使用中,开发者会发现更多实用特性,如问题视图(Problems View)用于显示错误和警告,搜索视图(Search View)用于查找代码中的特定字符串,以及资源管理(Resource)视图...

    使用trim()方法比较两个字符串是否相等,并输出结果(附详细步骤).txt

    虽然本文主要关注于使用`trim()`方法和`equals()`方法比较字符串,但在示例代码中还涉及到日期格式化的部分。这里简单介绍一下这部分内容: - `DateFormat`类提供了日期和时间的格式化和解析。 - `SimpleDateFormat`...

    Eclipse2019-06中安装Spket1.6.8插件(win7 64).rar

    将在控制台输出一串字符。不要清除,将其复制出来,然后找到D:\Program Files\jee-mars\eclipse\configuration\org.eclipse.equinox.simpleconfigurator\bundles.info文件,把内容追加到bundles.info后面。此时spket...

    eclipse使用技巧2

    - `Ctrl+Shift+Y`:转换选择的字符串为大写。 - `Ctrl+Shift+X`:转换选择的字符串为小写。 - `Ctrl+Shift+H`:显示选择对象的引用。 - `Ctrl+Shift+O`:组织导入,自动添加缺少的导入语句,并删除无用的导入。 ...

    eclipse默认编码GBK改为UTF-8

    这些参数告诉JVM使用UTF-8编码,并设定用户的国家和地区为美国,以确保相关本地化字符串也以UTF-8处理。 2. **设置工作空间编码**: - 启动Eclipse后,选择`Window` -> `Preferences`,进入首选项设置界面。 - ...

    eclipse 使用说明

    `System.out.println()`用于在控制台上输出字符串。 2. **运行程序**: - **使用Eclipse**:点击工具栏上的运行按钮或选择“运行”>“运行”。 - **结果**:控制台将显示“HelloWorld!”输出。 #### 三、编译与...

    idea常用的插件.docx

    Mybatis Log Plugin 可以将 Mybatis 脚本输出到控制台中,使开发者可以更方便地进行开发和测试。 3. Maven Helper Maven Helper 是一款功能强大的插件,旨在帮助开发者更好地管理 Maven 项目。该插件提供了许多实用...

    jad的使用方法——包括参数的详细介绍

    - `-nl`: 将字符串拆分成多行输出,提高代码的可读性。 - `-ff`: 数据成员在方法之前显示,更符合常规编程习惯。 - `-space`: 在关键字和表达式之间插入空格,遵循 Java 的编码规范。 - `-nonlb`: 不在大括号前换行...

    Eclipse中文教程

    Eclipse还会显示控制台输出,方便查看程序运行结果。 五、调试 Eclipse的调试功能强大,包括设置断点、单步执行、查看变量值、调用栈信息等。在代码行号前点击,即可设置断点。运行时,当程序执行到断点处会暂停,...

    实例教程1小时学会Python.pdf

    - "print"语句:Python中的标准输出函数,可以打印信息到控制台。 - "Hello, world!":最基础的程序示例,用于展示如何在Python中输出文字。 - 注释:在Python中,单行注释以"#"开头,多行注释可以通过三个双引号...

    Eclipse Tail Plugin-开源

    在Eclipse Tail Plugin的实现中,它利用Eclipse插件体系结构,无缝集成到Eclipse IDE中。用户可以通过Eclipse的插件管理器安装该插件,或者直接将提供的压缩包"org.jdt.eclipsetail_0.5.0"解压后放到Eclipse的...

    高级程序设计语言实验--修订-2014.pdf

    `:这是一个输出语句,用于在控制台输出字符串HelloWorld。 - `String str="test";`:这行代码声明了一个String类型的变量str,并给它赋了一个字符串"test"。 3. Java中的数组和文件操作 文档中通过`Scanner`类展示...

    !!!高校教师《Python程序设计》doc版本教案共97页 (2).docx

    - 在控制台输出:“Hello, World!” **理解要点** - **打印函数:** `print()`用于在终端显示指定内容。 - **字符串:** `"Hello, World!"`是一个字符串,用于存储文本信息。 - **语法规范:** Python中的字符串...

    PHP中文调试技术手册(PHP-Debug-Manual-public)

    echo和print是PHP中最基本的输出函数,主要用于输出字符串。在调试过程中,可以直接输出变量的值,以验证程序的执行流程和变量的当前状态。 代码示例: ```php $a = 1; $b = 2; if ($a == 1) { echo "分支1"; } ...

    Java经典编程300例(完整版+源码

    字符串与包装类、 java集合类框架、 常用数学工具类、 错误处理、 输入/输出、 枚举类型与泛型、 swing入门、 多线程、 网络通信和数据库操作。 本书所精选的实例都是一线开发人员在实际项目中所积累的,并进行了...

    静态类型编程语言Kotlin 语言教程完整版

    参数 `args` 是一个字符串数组,可以用来接收命令行参数。 - `println("Hello World!")`: 输出 “Hello World!” 到控制台。 #### 面向对象编程 Kotlin 支持面向对象编程,包括类、继承、接口等概念。 ```kotlin ...

    Grails快速入门

    7. **正则表达式**:Groovy内置了强大的正则表达式支持,方便处理字符串匹配和替换等任务。 以上是关于Groovy快速入门的一些基础知识和特性介绍,希望对初学者有所帮助。通过掌握这些基本概念,开发者可以更快地...

    JasperAssistant User Guide

    JasperAssistant是一款专门用于Java报表组件JasperReports的可视化设计工具,它以Eclipse插件的形式存在,旨在简化复杂报表的设计过程。通过提供一个直观的用户界面,JasperAssistant使得开发人员可以轻松地创建、...

Global site tag (gtag.js) - Google Analytics