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的扩展点,请查看这里。