openoffice4.1.5 connection refused

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35542689/article/details/82425909

具体错误如下:

java.net.ConnectException:connectionfailed:socket,host=localhost,port=8100,tcpNoDelay=1:java.net.ConnectException:Connection refused: connect

at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79) 

错误场景,Linux使用Runtime.getRuntime().exec()方法通过命令

/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

来启动openoffice,如果通过这个命令去启动openoffice服务器,然后马上又进行转换是会报拒绝连接的异常,但是手动启动openoffice又可以使用。

解决方法:

OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1",8100);
        Thread th=new Thread(new Runnable() {
			
			@Override
			public void run() {
				try {
					System.out.println("开启连接");
					connection.connect();
					System.out.println("连接完成");
				} catch (ConnectException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
        try {
        	System.out.println("等待10秒");
        	Thread.sleep(10000);
        	System.out.println("启动线程");
			th.start();
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

调用一个线程等待几秒钟再去连接openoffice,完美解决这个问题。

原因延伸:通过soffice命令启动openoffice,会发现有两个进程,一个是soffice,另一个是soffice.bin。初步认为是,通过代码启动openoffice,只是启动了soffice这个进程,就算是使用warfor(),也只能监听soffice这个进程,然而要连接openoffice需要等待soffice联动启动soffice.bin,才能连接。我这条路都没有通,你就要过身,肯定不允许你过去。

猜你喜欢

转载自blog.csdn.net/qq_35542689/article/details/82425909