线程和界面如何互相调用?

longyun015 2014-03-30 11:47:28
为了代码 能比较清晰合理。
我把界面写在一个类。 控制的线程写在一个类。
如:

我有一个 客户端界面 client,接收消息的 message 类
client 是做界面点击和显示之类的、
然后 message 是不断处于接收 来自 服务器发送过来的消息。
然后根据不同类型消息要做出对应指示。

我现在用的笨方法就是,在构造这个 message类的时候,把界面都 一些组件 作为参数传进来。
然后当 message 要有控制时,就直接调用这些组件的方法来得到 client 界面的显示切换。

可是问题是,有时候 client 里的 组件有很多,不可能都一下子全部传过去吧?这样感觉很麻烦。
不知大神们有什么好建议或者好方法呢?
...全文
149 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
villagehead 2014-04-02
  • 打赏
  • 举报
回复
引用 9 楼 longyun015 的回复:
[quote=引用 8 楼 villagehead 的回复:] 抱歉,上面的“调用c.doSth(param)"和"这样,”之间, 少写了一句: ”然后在controller的doSth方法再调用controller里面的c.doSth“做处理。 也就是委托给定义在controller里的client实例干实事 good luck
大概明白你的意思。。那我还不如把整个 client实例当参数传给 message 呢 你这样的话,虽然结构清晰点,但操作性不太可行。而且client 要调动的东西比较多。 也不可能都写成方法,有些是 组件的方法之类。来回调动很麻烦的。。 不过还是谢谢你了。 我直接把message 类 的 线程 直接放进 client 里去好了。这样图个方便[/quote] 也行, 不过我建议还是把message类当作工具类封装一下, 放一个实例在client去操作。 这样就等于client一手托两家,一家是界面控件,一家是消息处理 (其实这样等于client也就是个controller的角色了,呵呵) good luck
coolrain82 2014-04-02
  • 打赏
  • 举报
回复
最简单的方法:把界面类的控件做成public static,就可以直接调用了
代码间的舞者 2014-04-01
  • 打赏
  • 举报
回复
你应该在client事先写好几个模板,然后message传过来的,就是要调用的模板的编号之类的
longyun015 2014-04-01
  • 打赏
  • 举报
回复
引用 8 楼 villagehead 的回复:
抱歉,上面的“调用c.doSth(param)"和"这样,”之间, 少写了一句: ”然后在controller的doSth方法再调用controller里面的c.doSth“做处理。 也就是委托给定义在controller里的client实例干实事 good luck
大概明白你的意思。。那我还不如把整个 client实例当参数传给 message 呢 你这样的话,虽然结构清晰点,但操作性不太可行。而且client 要调动的东西比较多。 也不可能都写成方法,有些是 组件的方法之类。来回调动很麻烦的。。 不过还是谢谢你了。 我直接把message 类 的 线程 直接放进 client 里去好了。这样图个方便
villagehead 2014-04-01
  • 打赏
  • 举报
回复
抱歉,上面的“调用c.doSth(param)"和"这样,”之间, 少写了一句: ”然后在controller的doSth方法再调用controller里面的c.doSth“做处理。 也就是委托给定义在controller里的client实例干实事 good luck
villagehead 2014-04-01
  • 打赏
  • 举报
回复
引用 4 楼 longyun015 的回复:
[quote=引用 3 楼 villagehead 的回复:] 可以考虑MVC模式 …… 做j2ee做多了,就老绕着j2ee说,见谅啊见谅, 呵呵
你上面说的确实是这样,我的逻辑处理是放在 界面层里一起处理的。 我想知道你说的 “message收到一个信息,发送内容给控制器, 控制器来传递给client,client显示给用户” 怎么进行? 因为jsp 是重新加载一个界面,或者挑转。这样的话,就不用去调用之前的。 而我的界面,我想调用我的组件,如 label 改变内容,或者 jTextArea 打印文字等到。 [/quote] 大概是这个样子吧

class message{
   controller c = controller实例
}

class client{
 controller c = controller实例

 private doSth(param){
  //更新组件内容状态等状态
 }
}

class controller{

 client c = client实例
 message m = message实例
     
  private doSth(param){
      c.doSth();
  }
}

然后,message接收了一个消息, 组织好param后(这步可以让controller做,也可以放在另外的util类里) 调用c.doSth(param) 这样,就完成了一次message传递给controller信息,controll调用client的方法处理的流程 反向同理 client调用(发给)controller一个方法(信息),然后controller调用m.XXX方法发送 大概是这个意思吧, 具体程序其实我也没写过 good luck
byourfan 2014-03-31
  • 打赏
  • 举报
回复
Observable/Observer,也许可以试试
villagehead 2014-03-31
  • 打赏
  • 举报
回复
可以考虑MVC模式 MVC不只能构造j2ee环境,对于j2se的构造也有很好的“分层”效果 lz可以考虑设计出一个控制器 message和client都通过这个层,来向对方发送命令 比如, message收到一个信息,发送内容给控制器, 控制器来传递给client,client显示给用户 而且,根据lz的描述 client里面逻辑处理和显示处理是在一起的, 可以考虑分层设计, 类似servlet和jsp的关系, servlet负责逻辑处理,然后把处理过的内容交给jsp完成 做j2ee做多了,就老绕着j2ee说,见谅啊见谅, 呵呵
longyun015 2014-03-31
  • 打赏
  • 举报
回复
引用 2 楼 sushaoxiang911 的回复:
可以不可以做一个interface,把你接收到message后需要进行的操作写到interface里面,由clientimplement并且重载这些interface函数,然后直接将client界面传给message,这样在message里面就可以调用interface的函数而且能保证封装性吧。。。
额。。不太明白你的意思。
longyun015 2014-03-31
  • 打赏
  • 举报
回复
引用 1 楼 fanslate 的回复:
Observable/Observer,也许可以试试
什么来的?请指教
longyun015 2014-03-31
  • 打赏
  • 举报
回复
引用 3 楼 villagehead 的回复:
可以考虑MVC模式 …… 做j2ee做多了,就老绕着j2ee说,见谅啊见谅, 呵呵
你上面说的确实是这样,我的逻辑处理是放在 界面层里一起处理的。 我想知道你说的 “message收到一个信息,发送内容给控制器, 控制器来传递给client,client显示给用户” 怎么进行? 因为jsp 是重新加载一个界面,或者挑转。这样的话,就不用去调用之前的。 而我的界面,我想调用我的组件,如 label 改变内容,或者 jTextArea 打印文字等到。
sushaoxiang911 2014-03-31
  • 打赏
  • 举报
回复
可以不可以做一个interface,把你接收到message后需要进行的操作写到interface里面,由clientimplement并且重载这些interface函数,然后直接将client界面传给message,这样在message里面就可以调用interface的函数而且能保证封装性吧。。。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧