Java Swing Threading:执行逻辑命令时GUI挂起

时间:2018-04-18 08:10:54

标签: java multithreading swing ar.drone

我目前正在开展一项涉及Parrot A.R.的控制开发的项目。无人机2.0电源版。

为此,我们使用YaDrone库(https://vsis-www.informatik.uni-hamburg.de/oldServer/teaching/projects/yadrone/)来控制无人机。为了更好的控制,已经在这个库周围创建了一个DroneController类。这基本上托管了无人机使用的所有逻辑。

在Java Swing中开发了一个GUI来显示有关无人机的各种信息。

我们遇到的问题是,当程序执行时,也就是无人机启动,GUI打开,但挂起/冻结,直到无人机的所有命令都被无人机发送和执行。

显然,我们喜欢在将命令发送到无人机时同时更新GUI。

我们一直在试验SwingUtilities和类似的东西,没有运气。这是目前的主要课程:

Main Class 可以在这里看到项目的整个代码:https://github.com/tMascagni/CDIO_3/tree/dev(特别是在dev分支中。)

最重要的部分是ui包,Main.java和DroneController.java。

如果有人对如何解决这个问题有任何想法,我真的很感激任何反馈!

1 个答案:

答案 0 :(得分:0)

通常,以下方法可行:

   Thread t = new Thread(()->{
      // this code will be executed outside the EDT thread, 
      // and will not make the interface non-responsive
      // ...

      SwingUtilities.invokeLater(()->{
         // and this code will execute once the above code is finished,
         // within the EDT thread, and can report on results
      });
   }).start();

更简化的方法,但实施起来有点复杂,就是使用SwingWorker