2015-06-19 25 views
0

我有这个测试类尝试连接到开放式办公室。无法连接到套接字(WSANOTINITIALISED,WSAStartup()没有被调用)错误,当运行程序

import com.sun.star.bridge.XUnoUrlResolver; 
import com.sun.star.comp.helper.Bootstrap; 
import com.sun.star.lang.XMultiComponentFactory; 
import com.sun.star.lang.XMultiServiceFactory; 
import com.sun.star.uno.UnoRuntime; 
import com.sun.star.uno.XComponentContext; 

public class Test { 



    XMultiServiceFactory ooConnect() { 

     final String sConnectionString = "uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"; 
     // create the initial component context 
     XComponentContext rComponentContext = null; 
     try { 
      rComponentContext = Bootstrap 
        .defaultBootstrap_InitialComponentContext(); 
     } catch (Exception e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

     // retrieve the servicemanager from the context 
     XMultiComponentFactory rServiceManager = rComponentContext 
       .getServiceManager(); 

     Object objectUrlResolver = null; 
     try { 
      objectUrlResolver = rServiceManager.createInstanceWithContext(
        "com.sun.star.bridge.UnoUrlResolver", rComponentContext); 
     } catch (Exception e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     // Create a new url resolver 
     XUnoUrlResolver xurlresolver = (XUnoUrlResolver) UnoRuntime 
       .queryInterface(XUnoUrlResolver.class, objectUrlResolver); 

     XMultiServiceFactory rOfficeServiceManager = null; 
     try { 
      // resolve the uno-url 

      System.out.println("BLOCK 3"); 
      Object objectInitial = xurlresolver.resolve(sConnectionString); 

      rOfficeServiceManager = (XMultiServiceFactory) UnoRuntime 
        .queryInterface(XMultiServiceFactory.class, objectInitial); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return rOfficeServiceManager; 
     } 
     return rOfficeServiceManager; 
    } 




    public static void main (String [] args) 

    { 
     Test test = new Test(); 

     XMultiServiceFactory serviceFactory = test.ooConnect(); 
     if(serviceFactory != null) 
     { 
      System.out.println("YEYEYEYEY"); 
     } 
    } 
} 

当我尝试运行此代码时我得到异常。

com.sun.star.connection.NoConnectException: Connector : couldn't connect to socket (WSANOTINITIALISED, WSAStartup() has not been called) 
     at com.sun.star.bridges.jni_uno.JNI_proxy.dispatch_call(Native Method) 
     at com.sun.star.bridges.jni_uno.JNI_proxy.invoke(JNI_proxy.java:171) 
     at com.sun.proxy.$Proxy3.resolve(Unknown Source) 
     at Test.ooConnect(Test.java:47) 
     at Test.main(Test.java:66) 

现在我明白为什么这个异常即将到来,但我没有得到如何解决这个问题的解决方案。

+1

嗯..调用WSAStartup()? –

回答

0

在Windows上,WinSock库必须通过进程显式初始化,然后才能使用。这通常在应用程序启动时使用WSAStartup()函数完成。大多数其他平台在使用套接字API函数之前不需要显式套接字库初始化。在Windows上运行时,Uno框架应该在内部处理这个问题。如果不是,我会考虑一个框架错误,并且应该相应地向作者报告。但是我发现Uno不可能解释这一点。

作为一种解决方法,您可以使用JNA在使用Uno之前手动调用WSAStartup()

相关问题