如何找到com.sun.star.uno.RuntimeException的真正原因?

时间:2009-02-17 13:49:54

标签: java openoffice.org

我正在尝试使用OpenOffice Java API替换OpenOffice文档中的字段。我正在使用insertString方法:

  xText.insertString(((XTextField) fieldMaster).getAnchor(), value.toString(), false);

堆栈跟踪如下:

    [junit] com.sun.star.uno.RuntimeException: 
    [junit]     at com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:182)
    [junit]     at com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:148)
    [junit]     at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:344)
    [junit]     at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:313)
    [junit]     at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:101)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:652)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:154)
    [junit]     at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:136)
    [junit]     at $Proxy14.insertString(Unknown Source)
...

如果我正确地解释了这一点,它告诉我它连接到与Java不同的进程,其他进程中的某些进程失败了,但它没有告诉我问题是什么。

我发现有一些环境变量(PROT_REMOTE ...)可以让我记录来自这些远程(不同进程,同一台计算机,顺便说一句)进程的消息,但前提是我运行的OpenOffice版本启用了调试吗? / p>

我在Ubuntu上使用deb存储库中的OpenOffice版本,并且有兴趣编译我自己的OpenOffice版本。

有什么方法可以从远程进程获取一些有用的错误消息,以帮助我理解为什么我的代码失败了?

1 个答案:

答案 0 :(得分:0)

我还没有找到一个很好的方法来确定导致RuntimeExceptions的原因,但OpenOffice.org论坛上的某个人解决了我的问题。我以错误的方式使用API​​。

而不是:

XTextDocument xTextDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,document);
XText xText = xTextDocument.getText();
xText.insertString(((XTextField) fieldMaster).getAnchor(), value.toString(), false);

我应该使用锚中的文字:

XTextRange anchor = ((XTextField) fieldMaster).getAnchor();
anchor.getText().insertString(anchor, value.toString(), true);

显然,标题中的文字不是文档的一部分。如果您打开OpenOffice文件,这是有道理的。标题存储在ODF文件中的单独XML文档中......