我目前正在开展一项涉及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。
如果有人对如何解决这个问题有任何想法,我真的很感激任何反馈!
答案 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。