Phrancol's blog
To be surprised,to wonder,is to begin to understand.
BlogJava
首页
联系
聚合
管理
随笔 - 1 文章 - 37 trackbacks - 0
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
留言簿
(16)
给我留言
查看公开留言
查看私人留言
随笔分类
反汇编(1)
随笔档案
2008年5月 (1)
文章分类
Eclipse(2)
iOS(1)
Mir3gAnyWhere(1)
OSGI(16)
反汇编(5)
文章档案
2011年11月 (1)
2009年11月 (2)
2009年8月 (1)
2009年7月 (2)
2009年5月 (2)
2009年4月 (3)
2009年3月 (1)
2008年11月 (1)
2008年10月 (1)
2008年7月 (1)
2008年6月 (6)
2008年5月 (1)
2008年4月 (5)
2007年11月 (1)
2007年10月 (1)
2007年9月 (4)
2007年8月 (2)
test
搜索
最新评论
1. re: 精武馆——在线棋牌游戏平台[未登录]
好
--五味子
2. re: 精武馆——在线棋牌游戏平台[未登录]
很好玩
--五味子
3. re: [原]一个例子理解AccessController.doPrivileged()
谢谢分享,我第一遍没看懂,后来去其他地方看了有关权限检查的的文章以后才看懂,建议解释一下调用栈,和权限检查(取调用栈中权限的交集)。
--Flexin
4. re: [原]MIR3G二次加解密反汇编分析(四)——还原
@Mir3
好久没有研究这个...
--phrancol
5. re: [原]MIR3G二次加解密反汇编分析(四)——还原
ll4bb903 这其实是srand 函数
--Mir3
[原]Eclipse产品应用——控制台的使用
在开发一个基于Eclipse的产品应用中,类似于Eclipse控制台的小部件是必不可少的,例如:
1. 开发过程中需要一个控制台来专门输出调试信息,而在产品发布后却不需要
2. 需要一个控制台用于输出系统信息
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应该避免暴露
*/
public
MessageConsole getMessageConsole()
{
return
this
.console;
}
/** */
/**
* 这里的println有很大的发挥空间
*/
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,下面的代码就是具体的部分了
先看看[系统消息控制台]
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
"
系统消息
"
;
}
}
其他2个View也是这样的代码了,只是名字不同
这样设计出来的控制台有较好的扩展性,耦合度也较低,至于Log4的应用需要在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
阅读(1257)
评论(2)
编辑
收藏
所属分类:
Eclipse
FeedBack:
#
re: [原]Eclipse产品应用——控制台的使用 2008-07-03 10:21
冰河の泥鱼
如果代码全一些就会更好了.发现MessageConsole这个类没有.
回复
更多评论
#
re: [原]Eclipse产品应用——控制台的使用
2008-07-03 10:23
冰河の泥鱼
哈,找到了.
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
[原]JAVA版传奇3G辅助程序
[原]Eclipse产品应用——控制台的使用