2009-02-17 444 views
1

我试图用OpenOffice Java API替换OpenOffice文档中的字段。我使用的是insertString方法:如何找到com.sun.star.uno.RuntimeException的真正原因?

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 ...)可以让我从这些远程(不同进程,同一台计算机,btw)进程记录消息,但只有在启用调试时运行OpenOffice版本?

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

有没有什么办法可以从远程过程中获得一些有用的错误消息,以帮助我理解为什么我的代码失败?

+0

下面是否有其他任何堆栈跟踪部分? – 2009-02-18 04:03:22

回答

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