1

我正在尝试使用 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 版本?

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

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

4

1 回答 1

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 文档中...

于 2009-02-24T06:53:49.887 回答