java - Batik:当我从线程调用 invokeLater 时出现 IllegalStateException

标签 java multithreading illegalstateexception batik

我已经在这里发布了类似的问题:Batik IllegalStateException when resizing the JComponent containing the JSVGCanvas 。然而,我可以将问题减少到最少的代码集。也许这可以帮助别人找到我的问题。

我从线程中重复调用以下代码:

//currentComponent is a custom JComponent that contains the JSVGCanvas
if(currentComponent != null && currentComponent.getSvgCanvas().getUpdateManager() != null)
{
    try
    {
        currentComponent.getSvgCanvas().getUpdateManager().getUpdateRunnableQueue().invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                resetDocument();
            }

            private void resetDocument()
            {
                currentComponent.getSvgCanvas().setDocument(currentComponent.getSvgCanvas().getSVGDocument());
            }
        });
    }
    catch(Exception e)
    {
        System.out.println("Error");
        e.printStackTrace();
    }
}

有时我会遇到以下异常:

java.lang.IllegalStateException: RunnableQueue not started or has exited
    at org.apache.batik.util.RunnableQueue.invokeLater(RunnableQueue.java:277)
    at java.lang.Thread.run(Unknown Source)

这是 batik 中的错误还是我做错了什么?

最佳答案

我遇到了类似的问题。仅在特殊用例中才会发生相同的 IllegalStateException。

我的问题是我的代码在

期间执行
documentLoadingCompleted(SVGDocumentLoaderEvent P_event)

因为我正在执行我的代码

gvtRenderingCompleted(GVTTreeRendererEvent P_e)

一切正常。

关于java - Batik:当我从线程调用 invokeLater 时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830292/

相关文章:

java - JPanel 不更新,无论我尝试什么

java - Java 中的 Thread.yield() 和 Thread.sleep(0) 有什么区别?

java - 仅在 api 19 中单击按钮时发生 IllegalStateException

java - 部署 war 文件 javax.servlet 未找到的 Tomcat 错误

java - GWT GXT 获取选定行中的所有值?

java - 客户端在监听服务器时主动等待

android - Android 是如何管理内存的?

android - java.lang.IllegalStateException : Can not perform this action after onSaveInstanceState, FragmentTabHost 问题

android - 列类型 bool 值的房间数据库迁移问题

java - 使用正则表达式替换某个字符串 - Java