[英]couldn't connect to socket (WSANOTINITIALISED, WSAStartup() has not been called) error while running program
我有這個測試班,試圖與開放辦公室聯系。
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庫,然后才能使用它。 通常在應用程序啟動時使用WSAStartup()
函數來完成此操作。 在使用套接字API函數之前,大多數其他平台不需要顯式的套接字庫初始化。 在Windows上運行時,Uno框架應在內部進行處理。 如果不是,我會認為是框架錯誤,應相應地向作者報告。 但是我發現Uno不太可能不考慮這一點。
解決方法是,在使用Uno之前,可以讓代碼使用JNA手動調用WSAStartup()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.