에 체인, 나는 private:factory/scalc
에서로드 XComponent
이 com.sun.star.util.XModifyBroadcaster
을 인터페이스 주조 할 수있는 서비스에 속하는 승, 알 수 있었다 hich는 com.sun.star.util.XModifyListener
의 설치를 허용합니다.
import com.sun.star.beans.PropertyValue;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.comp.helper.BootstrapException;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.EventObject;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.util.XModifyBroadcaster;
public class CalcListener {
public static void main(String[] args) {
try {
// Lots of verbose code to get a Document instance
final XComponentContext xRemoteContext = Bootstrap.bootstrap();
if(xRemoteContext == null) {
System.err.println("ERROR: Could not bootstrap default Office.");
return;
}
final XMultiComponentFactory xRemoteServiceManager = xRemoteContext.getServiceManager();
final Object desktop = xRemoteServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", xRemoteContext);
final XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, desktop);
final PropertyValue[] loadProps = new PropertyValue[0];
final XComponent xSpreadsheetComponent = xComponentLoader.loadComponentFromURL("private:factory/scalc", "_blank", 0, loadProps);
// Cast to interface Document, to do anything useful later
final XSpreadsheetDocument xSpreadsheetDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(XSpreadsheetDocument.class, xSpreadsheetComponent);
// Cast to interface XModifyBroadcaster to attach listener
final XModifyBroadcaster messageHost = (XModifyBroadcaster) UnoRuntime.queryInterface(XModifyBroadcaster.class, xSpreadsheetDocument);
messageHost.addModifyListener(new XModifyListener()
{
public void modified(EventObject eo) {
System.out.println("modified:"+eo.Source);
}
public void disposing(EventObject eo) {
System.out.println("disposing:"+eo);
}
});
// Do possibly useful stuff
// ...
} catch (BootstrapException | Exception ex) {
System.err.println("bad things happened:"+ex);
}
}
}
내가 수동으로 클래스 패스에이 시간에 (은/usr/lib 디렉토리/URE/lib에) libjpipe.so하는 경로를 추가했다 :
다음은 작업 예입니다. –
왜 LibreOffice는 이처럼 명확한 것을 제공하지 않습니까? 잘 했어 고마워. – user1501247