当前位置: 首页 > 知识库问答 >
问题:

添加(根)抛出java.lang.IllegalStateException

侯和惬
2023-03-14

当我想从其他线程向GUI添加节点时,我遇到了问题。它抛出非法状态异常,我不知道如何修复它。

public class DashBoardController implements Initializable {
    @FXML
    private FlowPane dashBoardPane;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    try {
        RTMClientV2 client = new RTMClientV2("localhost", 9009, new DashBoardArranger(this));
        Thread clientTH = new Thread(client);
        clientTH.start();
    } catch (IOException ex) {
        Logger.getLogger(DashBoardController.class.getName()).log(Level.SEVERE, null, ex);
    }
    }        

    public synchronized void addToDashBoard(Pane root){
        dashBoardPane.getChildren().add(root);
    }
}

我只是加载我的。FXML文件到GUI与此控制器,当程序启动时,它运行Thread负责与服务器(clientTH.start();)通信,一切正常。但是当服务器在初始化后发送数据时。并且我希望将此数据添加到我的仪表板,我像以前一样使用方法公共同步无效addToDashBoard(窗格根),但它抛出java.lang.IllegalStateException,我不知道为什么。

顺便说一句:我发现:“如果父节点附加到场景,则其子节点列表只能在JavaFX应用程序线程上修改。如果违反此限制,将抛出IllegalStateException。”,但这对我没有用处。仪表板被添加到GUI中的另一个窗格。

顺便说一句:输出:

线程Thread-4java.lang.IllegalStateException中的异常:不在外汇html" target="_blank">应用程序线程上;在com.sun.javafx.tk.Toolkit.checkFxUserThread(未知源)
在com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(未知源)
在javafx.scene.Parent$1.onProposedChange(未知源)
在com.sun.javafx.collections.VetoableObservableList.add(未知源)
在com.sun.javafx.collections.ObservableListWrapper.add(未知源)
在probeobserver.gui.probeSite.DashBoardController.addToDashBoard(DashBoardController.java:125)
在probeobserver.gui.probeSite.DashBoardArranger.setCompName(DashBoardArranger.java:66)
在probeobserver.rtm.RTMClientV2.readAllDataAndUpdate(RTMClientV2.java:144)
在probeobserver.rtm.RTMClientV2.run(RTMClientV2.java:80)
在java.lang.Thread.run(Thread.java:722)

共有1个答案

东门翰
2023-03-14

在I/O线程中,您需要在UI线程中与UI交互:

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        Pane root = ...; //if you set any properties of the pane, do it here.
        dashBoardController.addToDashBoard(root);
    }
}
 类似资料:
  • 我试图在OSGi容器中添加一个BundleWatcher钩子,这样我就可以在包加载时监视它们。我在config.ini中做了以下更改, > 在osgi.bundles属性中添加了对我的jar的引用,如下所示,osgi.bundles=,reference\:file\:../lib/my.jar@2:start 设置属性osgi.framework.extensions=mybundle 在osg

  • 我最近刚开始使用kotlin进行android开发,所以在android studio也是一个彻头彻尾的傻瓜。我正在尝试构建一个超级简单的HelloWorld应用程序,但出现了以下错误: 现在必须显式声明注释处理器。发现编译类路径上的以下依赖项包含注释处理器。请将它们添加到annotationProcessor配置中。-jetified-kotlin-compiler-embeddeble-1.3

  • 问题内容: 尝试添加另一个列表时抛出List.addAll 。 在循环中,我在做, 从文件中读取 supportType 。 但是第2行抛出一个,但是我无法确定为什么? 我要在列表中添加另一个列表,那么为什么不支持此操作? 问题答案: 返回一个固定大小的列表,该列表由数组支持,并且您不能向其中添加元素。 您可以创建一个可修改的列表以进行工作:

  • 我有一个数据集 是否有任何方法可以确保,如果不同的的下一个值小于中的值,那么它应该在 列中执行加法。 下面是我期待的结果 所以基本上我寻求一个解决方案,对于每个唯一的< code>field_pointpath,如果它遇到一个小于前一个值的值,那么它应该将前一个值与下一个值相加。 if <代码>值[i 1]

  • 在下面的过程中,我得到了一个错误。我意识到这个错误似乎是抛出的,因为它试图读取分区(rec)中的整个记录,但试图将其分配给字符串(Str=jsonArray.toJSONString();)同时我使用5秒的批处理间隔火花流配置。对这段代码有什么建议吗?请好心帮忙。谢啦 错误在这一行: 以下是我的全部功能:

  • 我已经尝试使用添加目标在Xcode 5上添加测试目标- 2013-09-24 10:43:14.446堆栈交换[48895:c07]加载错误/Users/arielitovsky/Library/Developer/Xcode/DerivedData/MyApp fjegcztcnwqdfdimhonqzzqpdwr/Build/Products/Debug iPhone模拟器/堆栈交换测试。xc