Java 不能';运行程序时出现连接到套接字错误(wsanotinialised,未调用WSAStartup())
我有一个测试类,它试图与开放办公室连接Java 不能';运行程序时出现连接到套接字错误(wsanotinialised,未调用WSAStartup()),java,windows,sockets,openoffice.org,wsastartup,Java,Windows,Sockets,Openoffice.org,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.
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)
现在我明白了为什么会出现这种异常,但我没有找到解决方法。在Windows上,WinSock库必须由进程显式初始化才能使用。这是使用函数完成的,通常是在应用程序启动时。大多数其他平台在使用套接字API函数之前不需要显式的套接字库初始化。在Windows上运行时,Uno框架应在内部处理此问题。如果不是,我会认为是一个框架错误,并且应该相应地向作者报告。但我发现联合国办事处不太可能不对此负责 作为一种解决方法,您可以让代码在使用Uno之前使用JNA手动调用。Umm。。调用WSAStartup()?