由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - FMP supports UI thread in both Swing and SWT
相关主题
java update main UI from child thread issue (转载)app开发其实很难搞
FMP for concurrent programming 招生(免费辅导)你们这些frontend的,新老婆出现了
Java 多线程 的架构如何改进?码工的工作
SWTautocomplete实现方法请教
如何快速保存大块数据(工作中遇到的问题)现在的趋势是广好还是专好
求建议,Java转Javascript? (转载)游戏公司招各种人才 (转载)
貌似先在做mobile developer比java developer更火。做web application backend 有前途还是infra有前途
现在.NET也往Node上转了system design question (转载)
相关话题的讨论汇总
话题: ui话题: fmp话题: string话题: void话题: public
进入Programming版参与讨论
1 (共1页)
o**2
发帖数: 168
1
上周 cplus2009 同学有个问题(http://www.mitbbs.com/article_t/Programming/31253813.html),涉及到GUI程序中线程之间转换的问题。就是controls都要在UIthread(Swing或SWT)里操作,而后台的logic要在非UIthread里操作。
我当时说了FMP可以轻易淘汰掉这种thread-base的编程技术,于是趁这个长周末,把对
UIthread的支持做进了FMP。想要试用的,可以在此download 2.0 jar:https://
github.com/fastmessenger/RI-in-Java/blob/master/fmp-2.0-bin.jar?raw=true
这里我借用 cplus2009 同学的问题作为范例:他的问题是有一个界面,上面有一个
BROWSE按钮,按了后弹出一个文件选择对话框。用户选好文件后,将文件名显示在
BROWSE按钮前面的text里。这里文件选择用来代表后台的耗时操作。
用FMP的,可以这样设计:一个Frontend class用来access UI controls,包括文件名
text,browse按钮等;另一个Backend class用来做后台耗时操作,这里用文件选择框
来代表。
public class Frontend {
// UI thread
void renderUI () {
}
// UI thread
void fileNameReady (String name) {
}
}
public class Backend {
// none UI thread
void selectFile () {
}
}
在运行时,要做一些准备,放哪里都行:
Frontend fr = new Frontend();
Backend bk = new Backend();
...
SwtMessenger messenger = new SwtMessenger(display); //display用来确定
UIthread
messenger.registerSwtReceiver(fr, "ui", "fileNameReady"); //FMP保证fr只会被
UIthread回调
messenger.registerReceiver(bk, "back", "selectFile"); //FMP保证fr只会被
nonUIthread回调
...
fr.setMessenger(messenger);
bk.setMessenger(messenger);
Frontend 和 Backend 里都需要有messenger的reference,因为运行中要用到。现在在
回过头来把这两个class补充完整:(不需要callService(),用sendMessage()就可以
了,因为不需要返回值,也不关心具体什么时候对方收到和执行完毕。)
public class Frontend {
// UI thread
void renderUI () {
...
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
messenger.sendMessage("back:selectFile");
}
}
}
// UI thread
void fileNameReady (String name) {
text.setText(name);
}
}
public class Backend {
// none UI thread
void selectFile () {
...open file selector and obtain filename
messenger.sendMessage("ui:fileNameReady", filename);
}
}
不论是从OO设计、还是concurrent设计,说FMP在这里胜出应该没有问题吧。
z*******3
发帖数: 13709
2
大牛你考虑一下上javafx的api接口吧
swing和swt都有些过气了
当年java在这两个ui年代,貌似都做得不太好
据说两个领导都是女的,女人当权,容易乱搞
o**2
发帖数: 168
3
这不是柿子挑软的捏嘛...
SWT是小众产品;Swing在东部倒是用来开发了不少trading系统的前台。老实说,这两
个从来都没有火过就有些过气了。
这个JavaFX刚出来,我还不了解,也不知道有没有人用,有空看看。
o**2
发帖数: 168
4
多谢老赵的提醒 (看见有人叫“老赵”,估计是你了,我就跟着叫了)
这个JavaFX和Swing的UI thread设计几乎是一样的,所以我就把对这三个GUI系统的支
持都做到一起了。
public class GuiMessenger extends Messenger {
private Display swtDisplay;
public GuiMessenger () {
super ();
}
public GuiMessenger (ExecutorService executorService) {
super (executorService);
}
public Display getSwtDisplay () {
return swtDisplay;
}
public void setSwtDisplay (Display swtDisplay) {
this.swtDisplay = swtDisplay;
}
synchronized public void registerJavaFxReceiver (Object implObj, String
receiver, String... services) {
registerReceiverImpl (ReceiverType.JavaFX, new Object[] { implObj },
receiver, services);
}
synchronized public void registerSwingReceiver (Object implObj, String
receiver, String... services) {
registerReceiverImpl (ReceiverType.Swing, new Object[] { implObj },
receiver, services);
}
synchronized public void registerSwtReceiver (Object implObj, String
receiver, String... services) {
registerReceiverImpl (ReceiverType.SWT, new Object[] { implObj },
receiver, services);
}
}
z*******3
发帖数: 13709
5
过奖
您还可以考虑用maven来发布您的这个项目
这样便于我们找到您的jars

【在 o**2 的大作中提到】
: 多谢老赵的提醒 (看见有人叫“老赵”,估计是你了,我就跟着叫了)
: 这个JavaFX和Swing的UI thread设计几乎是一样的,所以我就把对这三个GUI系统的支
: 持都做到一起了。
: public class GuiMessenger extends Messenger {
: private Display swtDisplay;
: public GuiMessenger () {
: super ();
: }
: public GuiMessenger (ExecutorService executorService) {
: super (executorService);

o**2
发帖数: 168
6
这个在我的TODO list上都好几个月了,你不提,还真说不定要再过几个月才想得起来
。刚在 sonatype.org 上开了帐号和ticket,要等等。他们说:Normally it takes
less than 2 business days.
不过group id什么的现在可以定好了:
groupId: com.fastmessenger
artifactId: fmp-ref-impl
version: 2.0.0

【在 z*******3 的大作中提到】
: 过奖
: 您还可以考虑用maven来发布您的这个项目
: 这样便于我们找到您的jars

1 (共1页)
进入Programming版参与讨论
相关主题
system design question (转载)如何快速保存大块数据(工作中遇到的问题)
FMP 进驻 Programming 版求建议,Java转Javascript? (转载)
FMP 一个完整可运行的范例程序貌似先在做mobile developer比java developer更火。
FMP mini profile现在.NET也往Node上转了
java update main UI from child thread issue (转载)app开发其实很难搞
FMP for concurrent programming 招生(免费辅导)你们这些frontend的,新老婆出现了
Java 多线程 的架构如何改进?码工的工作
SWTautocomplete实现方法请教
相关话题的讨论汇总
话题: ui话题: fmp话题: string话题: void话题: public