2009-02-17 441 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文檔中...