【问题标题】:java- how to multiple(indefinite) asynchronous callbacks. is there a desing pattern or somehing?java-如何多重(无限期)异步回调。有设计模式之类的吗?
【发布时间】:2019-09-23 20:19:56
【问题描述】:

我不确定我是否在标题中问对了,但这就是问题所在。 我有一个类可以异步执行操作,并且还必须在 Swing UI 线程上运行。像这样


SwingUtilities.invokeLater(() -> {
  myobj.dosomething(()->{

   SwingUtilities.invokeLater(() -> {
     myobj.dosomething(()->{
       //here it needs to repeat this again and again. 
       //for an indefinte number of times. So it is hedious to reapat this code
       //for few times  and impossible to make it dynamic based on user input. 
       //it was even worse without lambda sytax.
     });
    });
   });
});

编辑:我可能根本不应该提到摇摆。因为这不是问题,它只会增加它。主要问题是我需要调用myobj.dosomething(()->{ 太多次。并且每次它应该在上一次调用完成后开始。

【问题讨论】:

  • 你应该使用 javax.swing.Timer
  • 我不明白 Timer 是如何解决这个问题的。请阅读代码中的注释。我需要调用 myobj.dosomething ,比如说 10 次。每个调用都应该在前一个调用完成之后发生。

标签: java swing design-patterns callback


【解决方案1】:

如果您不想使用摇摆计时器,请创建一个线程并将您的 UI 代码发布回 UI 线程,如下所示:

Runnable r = new Runnable() {

    public void run() {

         while (condition holds) {
            //sleep, do work, etc.

            //Post UI code back to the Swing thread
            SwingUtilities.invokeLater(() -> { //some ui code }
         }
    }
};

Thread t = new Thread(r);
t.start();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多