我收到要修复的错误。有人编写从其他app调用打印文件的程序。使用此程序的jar在微软服务器上供少数用户使用。问题是用户之一在同一时刻也想要打印等。 Fox示例user1点击打印并进行打印预览,同时user2执行相同操作并且他没有打印预览,因为文档user2的打印视图显示在屏幕user1上。我不知道bug在哪里。也许主应用程序调用jar的相同实例或使用相同的进程。这是我的方法代码,当用户点击打印时调用。
public void openCreatedFile() {
String filePath = "file:///" + findNewlyCreatedFile().replace("\\", "/");
try {
if (xContext != null)
System.out.println("Opening file ...");
xMCF = xContext.getServiceManager();
Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
xCLoader = UnoRuntime.queryInterface(com.sun.star.frame.XComponentLoader.class, oDesktop);
com.sun.star.beans.PropertyValue[] szEmptyArgs = new com.sun.star.beans.PropertyValue[0];
xComp = xCLoader.loadComponentFromURL(filePath, "_blank", 0, szEmptyArgs);
System.out.println(filePath);
xDoc = UnoRuntime.queryInterface(com.sun.star.text.XTextDocument.class, xComp);
xContext = null;
} catch (Exception e) {
e.printStackTrace(System.err);
Thread.currentThread();
}
}
答案 0 :(得分:0)
您必须更改BootstrapSocketConnector。这是解决方案:
for(int i = 8100; i<=65535 ; i++){
if(available(i)){
libre.xContext = BootstrapSocketConnector.bootstrap(libre.oooExeFolder, "localhost", i);
System.out.println(i);
break;
}
}
例如, 8100,此处必须使用用于连接的端口。
例如,方法available()
,您可以在其中检查最近的可用端口:
private static boolean available(int port) {
try{
Socket ignored = new Socket("localhost", port);
return false;
} catch (IOException ignored) {
return true;
}
}