返回信息流如题!求教如何集成 java 本地应用到 Eclipse RCP 程序中[ema23][ema23][ema23]
这是一条镜像帖。来源:北邮人论坛 / java / #23642同步于 2012/10/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求教集成 java 本地应用到 Eclipse RCP 程序中
xydaxia
2012/10/10镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
就是自己编好了的一个图形用户的工具,我看了一下,可以用JNI技术把C++的程序集成进RCP,但是java的反而做不了了,而且那个java程序也是基于RCP平台的!求助啊!
亲,你想用Java做图形界面,然后调用C++的程序么?
用标准输入输出怎么样?用C++写一个命令行程序,传入参数,或者从标准输入读入操作数,然后从标准输出传出结果。在Java这边解析这个C++程序的输出。这样就避免使用JNI了。
想象一下,“Eclipse调用GCC来编译c程序,然后在Problem视图中显示各种编译错误”应该如何实现。
【 在 xydaxia 的大作中提到: 】
: 就是自己编好了的一个图形用户的工具,我看了一下,可以用JNI技术把C++的程序集成进RCP,但是java的反而做不了了,而且那个java程序也是基于RCP平台的!求助啊!
【 在 panbaobao 的大作中提到: 】
: SWT_AWT桥就可以啊
: 不是吧,这个没听过,真深奥啊!具体是什么,有什么参考书么?我看了java核心技术卷,RCP的书,没有提到这个技术的
给你贴一段吧,我懒得去翻看API了
以下内容转载自《自己动手写开发工具——基于Eclipse的工具开发》 清华出版社出版 ISBN:9787302162179 欲知详情敬请参阅。
比如做图形化报表通常使用JFreeChart,但是JFreeChart只能显示在AWT/Swing中,没有提供SWT的支持,是否代表我们在SWT中就不能使用它了呢?当然不是了。我们可以用SWT_AWT桥接器来解决这个问题。
调用SWT_AWT的getFrame方法就可以把一个Composite面板转换成AWT中的Frame,这样就可以在这个Frame中进行任何AWT/Swing相关的操作了。
比如使用JFreeChart:
Composite drawarea = new Composite(parent, SWT.EMBEDDED);
drawarea.setLayout(new FillLayout());
Frame canvasFrame = SWT_AWT.new_Frame(drawarea);
canvas = new java.awt.Canvas() {
public void paint(Graphics g) {
super.paint(g);
if (chart != null)
chart.draw((Graphics2D)g, getBounds());
}
};
canvasFrame.add(canvas);
如果在Frame中使用了AWT/Swing部件,我们也完全可以在SWT代码中访问AWT/Swing部件,由于这些AWT/Swing部件不是在一个UI线程中的,所以在访问的时候要进行同步。
Display.getDefault().asyncExec(new Runnable){
public void run() {
awtButton.setText("I am AWT Button");
}
};
还有一些Java的图形化应用也可以通过这种方式来支持SWT,比如一些成熟的Java GIS应用。