Eclipse插件开发~自定义控制台

  • 介绍
Eclipse中的可能会有多个控制台,如果你的开发中需要自定义一个控制台怎么办呢?这是有现成扩展点可以用的,请看下文。
  • org.eclipse.ui.console.consoleFactories
这里是有关该扩展点的文章:http://surenpi.com/?s=org.eclipse.ui.console.consoleFactories [codesyntax lang="xml"]
<extension point="org.eclipse.ui.console.consoleFactories">
	<consoleFactory label="%javaStackTraceConsole.label"
		class="org.suren.littlebird.console.LogConsoleFactory">
	</consoleFactory>
</extension>
[/codesyntax] 下面是一个实现的例子: [codesyntax lang="java"]
/**
 * 素人派 http://surenpi.com
 */
package org.suren.littlebird.console;

import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleFactory;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;

/**
 * @author suren
 * 用于重定向远程日志输出
 */
public class LogConsoleFactory implements IConsoleFactory
{
	private static MessageConsole msgConsole = new MessageConsole("Logger Console", null);
	private static boolean exists = false;

	@Override
	public void openConsole()
	{
		showConsole();
	}

	/**
	 *
	 */
	private static void showConsole()
	{
		if(msgConsole == null)
		{
			return;
		}

		IConsoleManager consoleMgr = ConsolePlugin.getDefault().getConsoleManager();

		IConsole[] existing = consoleMgr.getConsoles();

		for(IConsole console : existing)
		{
			if(msgConsole == console)
			{
				exists = true;
				break;
			}
		}

		if(!exists)
		{
			consoleMgr.addConsoles(new IConsole[]{msgConsole});
		}
	}

	public static void closeConsole()
	{
		if(msgConsole == null)
		{
			return;
		}

		IConsoleManager consoleMgr = ConsolePlugin.getDefault().getConsoleManager();
		consoleMgr.removeConsoles(new IConsole[]{msgConsole});
	}

	public static MessageConsole getConsole()
	{
		showConsole();

		return msgConsole;
	}
}
[/codesyntax] 下面是向控制输出内容的一个实现例子: [codesyntax lang="java"]
/**
 * 素人派 http://surenpi.com
 */
package org.suren.littlebird.console;

import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.suren.littlebird.server.ClientInfo;
import org.suren.littlebird.server.LogServerListener;

/**
 * @author suren
 * @since 2015-2-12
 */
public class LogListener implements LogServerListener
{
	private MessageConsoleStream msgStream;

	public LogListener()
	{
		MessageConsole logConsole = LogConsoleFactory.getConsole();
		this.msgStream = logConsole.newMessageStream();
		msgStream.setActivateOnWrite(true);
		logConsole.addPatternMatchListener(new SuRenPatternMatchListener());
	}

	@Override
	public void onLine(ClientInfo clientInfo)
	{
	}

	@Override
	public void offLine(ClientInfo clientInfo)
	{
	}

	@Override
	public synchronized void printMessage(CharSequence msg)
	{
		String msgStr = msg.toString();
		msgStream.print(msgStr);
	}

}
[/codesyntax] 如果想要在输出的时候设置文字颜色,可以调用msgStream.setColor方法,设置字体msgStream.setFontStyle,设置字符编码msgStream.setEncoding。 msgStream.setActivateOnWrite(true);这样可以在控制台有输出时自动显示在前面。
  • 参考
想知道更多Eclipse的扩展点,请查看这里。

你可能感兴趣的:(Eclipse插件开发~自定义控制台)