Java 摆动的局限性

Java 摆动的局限性,java,swing,thread-safety,event-dispatch-thread,Java,Swing,Thread Safety,Event Dispatch Thread,我们都知道,因为Swing不是线程安全的,所以它一次只能在一个线程中执行,称为EDT 为了拥有一个swinglike接口和允许可视化多线程的组件(换句话说,swing不限于仅在EDT中执行),我应该使用什么呢?使用swing。您不需要在一个线程中执行应用程序,只需更改GUI即可 执行多个线程非常常见,并且每个线程都执行以下操作: EventQueue.invokeLater(new Runnable() { public void run() { someFrame.se

我们都知道,因为Swing不是线程安全的,所以它一次只能在一个线程中执行,称为EDT


为了拥有一个swinglike接口和允许可视化多线程的组件(换句话说,swing不限于仅在EDT中执行),我应该使用什么呢?

使用swing。您不需要在一个线程中执行应用程序,只需更改GUI即可

执行多个线程非常常见,并且每个线程都执行以下操作:

EventQueue.invokeLater(new Runnable() {
    public void run() {
        someFrame.setVisible(true);
        myCustomTableModel.updateWithNewData(newListOfData);
    }
});

但是我能够同时从不同的线程访问和更改相同的swing组件(对象)吗?我说的是多个EDT同时执行……是的,您可以从任意多个线程安全地调用EventQueue.invokeLater,而不必担心并发性。系统将永远不会有多个事件调度线程,但您可以创建任意数量的应用程序线程;EventQueue.invokeLater正确地处理将可运行参数合并到事件调度线程的执行中的问题。我认为您误解了这些限制。这些并不是Swing的局限性,而是几乎所有GUI库的局限性。底线:您需要在所有GUI库中使用后台线程。我要求你给我看一个没有同样问题的。同样,你需要创建并发布一个。在我们能够看到、运行和理解您的代码之前,我们只是在吹嘘理论上的废话。同样,在我们看到一个例子之前,我们可以讨论,直到我们脸色发青。构建大多数GUI组件几乎不需要任何时间,除非你有一些不寻常的事情发生,如果你有,那么这些不寻常的事情应该在后台线程中完成。@Karlovsky120“为什么我不能让一个线程填充…而另一个线程…”在Swing中,一个完全有效的答案是“它不是那样工作的”。如前所述,UI系统通常不会以这种方式工作。我怀疑这是为了更容易(或“可行”)保持UI的自一致性和适当更新,同时也为了更容易使用库。理论上你可以用另一种方式,但是如果它太多了或者太难使用以至于你不想使用它,那么你就不会想使用它。如果你真的那么讨厌它,写下你自己的。-1并投票结束:没有具体问题的问题不可回答(因为没有问题,所以不可能发布;-)。