gpt4 book ai didi

Java 程序在 Microsoft Server 上每个用户一个进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:19 25 4
gpt4 key购买 nike

我收到需要修复的错误。有人编写了从其他应用程序调用打印文档的程序。带有此程序的 Jar 位于微软服务器上,供少数用户使用。问题是当一个用户想要打印而其他用户同时也想要打印时。例如,用户1单击打印并进行打印预览,同时用户2执行相同的操作,但他没有打印预览,因为文档用户2的打印预览显示在屏幕用户1上。不知道哪里有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();
}
}

最佳答案

您必须更改 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;
}
}

关于Java 程序在 Microsoft Server 上每个用户一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45755628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com