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

时间:2017-08-18 11:31:42

标签: java jvm multiprocessing windows-server-2012-r2

我收到要修复的错误。有人编写从其他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();
        }
    }

1 个答案:

答案 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;
        }
    }