java代码启动cmd执行命令来开启服务出现无法连接的问题

我想使用openoffice的格式转换功能,需要先开启openoffice的服务,当我手动敲入命令的时候,是可以运行起来的,但是通过Java代码执行却出现拒绝连接的问题,请帮我看看怎么回事

public static String soffice_host = "127.0.0.1";
public static String soffice_port = "8100";
public static Process pro = null;
String commands = "cmd.exe /C C:\\Program Files (x86)\\OpenOffice 4\\program\\startOpenoffice.bat";
System.out.println(commands);
//执行的命令:cmd.exe /C C:\Program Files (x86)\OpenOffice 4\program\startOpenoffice.bat
pro = Runtime.getRuntime().exec(commands);
connection = new SocketOpenOfficeConnection(soffice_host, Integer.parseInt(soffice_port));
System.out.println("获得连接"+connection);
//获得连接com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection@7002ee59
connection.connect();

startOpenoffice.bat:

soffice -headless  -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 

错误信息:

获得连接com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection@7002ee59
09:07:58.807 [main] DEBUG c.a.j.o.c.SocketOpenOfficeConnection - connecting
java.net.ConnectException: connection failed: socket,host=127.0.0.1,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect
    at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79)
    at com.fdauto.preview.read.ToWord.doc2Html(ToWord.java:82)
    at com.fdauto.preview.read.ToWord.main(ToWord.java:103)

手动敲命令:

cd C:\Program Files (x86)\OpenOffice 4\program
soffice -headless  -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
阅读 7.1k
3 个回答

通过查找资料发现一个新的包jodconverter-core,其中有个OfficeManager类可以实现另外的连接方式,我的问题是启动一次后,就可以连接,所以刚好可以,只能暂时这样解决了。

换种方法执行cmd:

 ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "C:\\Program Files (x86)\\OpenOffice 4\\program\\startOpenoffice.bat");
        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) { break; }
            System.out.println(line);
        }

图片描述

===========================================
String OpenOffice_HOME = "C:\Program Files (x86)\OpenOffice 4";// 这里是OpenOffice的安装目录,    

            if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
            OpenOffice_HOME += "\\";
            }
            Process pro = null;
            try {
                String command = OpenOffice_HOME  
                        + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
                pro = Runtime.getRuntime().exec(command);    //启动openoffice服务
                OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
                connection.connect();
                DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 
                converter.convert(SourceFile, HtmlFile);
                HtmlFile.createNewFile();
                connection.disconnect();  
            } catch (java.net.ConnectException e) {
                System.out.println(e.getMessage());
                System.out.println("OpenOffice服务未启动");
            } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
                e.printStackTrace();
                System.out.println("读取文件失败");
            } catch (Exception e){
                e.printStackTrace();
               System.out.println("其他异常");
            }finally{
                pro.destroy();  //销毁openoffice服务
            }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题