2011-02-17 16 views
1

我有一個正在嘗試創建VNC連接到另一個主機的Java小程序(注意運行小程序和VNC主機的主機不相同)。關於我正在使用的代碼的更多信息可以發現here爲什麼不將簽名的java applet連接到外部服務器?

我得到的代碼編譯成XenServerConsole.jar,我把我的Web服務器的根目錄以及文件夾結構com/citrix/xenserver/console/(控制檯文件夾包含所有的.java,.class和一些.png文件)。

我簽署了XenServerConsole.jar文件是這樣的:

keytool -genkey -validity 3650 -keystore pKeyStore -alias keyName 
keytool -selfcert -keystore pKeyStore -alias keyName -validity 3650 
jarsigner -keystore pKeyStore XenServerConsole.jar keyName 

和我加載HTML中的小應用程序像這樣的代碼:

<applet code="com/citrix/xenserver/console/Initialize.class" 
    archive="/XenServerConsole.jar" 
    width="800" height="600"> 
    <PARAM NAME="SESSION" VALUE="<%= @console_session %>"> 
    <PARAM NAME="URL" VALUE="<%= @console_url %>"> 
    <PARAM NAME="USEURL" VALUE="true"> 
</applet> 

出於某種原因,我仍然得到一個套接字權限錯誤,這裏的控制檯輸出:

Loading UI... 
Initializing... 
Starting main... 
Creating controls... 
Adding controls... 
Starting... 
Connection failed: access denied (java.net.SocketPermission 192.168.0.2:443 connect,resolve) 
Connection closed 
Reconnecting in 5 seconds... 

我在想,簽署JAR文件當用戶訪問HTML頁面時,會發出警告,如果他們接受了,它可以很好地連接到其他服務器。我在Windows(不是OSX)上得到運行/取消提示,但仍然出現SocketPermission錯誤。

爲什麼代碼仍然會拋出錯誤?

+0

嗯,我想知道這是否會改變任何事情。我刷新了小程序緩存,現在我沒有得到SocketPermission錯誤,但連接仍然失敗。查看trace [here](http://pastie.org/1576588) – bwizzy

+1

您必須在ConnectionFailed方法中解決NPE問題。我懷疑這與簽署你的jar有什麼關係。 – wolfcastle

回答

2

我想通了。首先,我發現任何時候你需要使用applet來確保你的每個測試都清除了你的類加載器緩存。要做到這一點,請關注java控制檯並按下「x」(至少這是它在OS X-Safari上的工作原理)。

簽署applet的,因爲我上面列出的沒有工作,如在對原有問題的意見後,我刷新的類加載器緩存我沒有得到的SocketPermission了,但它還是沒有,這裏的原因:

的Java小應用程序雖然是從Web服務器提供的,但正在本地計算機上運行,​​在這種情況下,小應用程序試圖連接到本地計算機無法訪問的URL,但Web服務器卻這樣做了。這就是我得到超時/ NPE錯誤的原因。 (我嘗試VNC進入的服務器位於Web服務器的局域網上,無法通過網絡訪問)。

所以我需要做的就是創建從Web服務器到VNC目標的隧道,並指定在我的小程序的HTML代碼,連接信息。但是這一切都超出了這個問題的範圍。