我正在尝试使用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版本。
有什么方法可以从远程进程获取一些有用的错误消息,以帮助我理解为什么我的代码失败了?
答案 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文档中......