2012-09-10 80 views
0

我有一個問題,開始發生後,我更新Java(我認爲)當我嘗試連接到我的Cpp服務器(似乎工作得很好),我收到一條錯誤消息,我找不到任何幫助。獲取Java套接字連接

下面是錯誤消息

java.security.AccessControlException: access denied 
("java.net.SocketPermission" "127.0.0.1:4000" "connect,resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366) 
    at java.security.AccessController.checkPermission(AccessController.java:555) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051) 
    at java.net.Socket.connect(Socket.java:574) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:208) 
    at jclientbare.init(jclientbare.java:27) 
    at sun.applet.AppletPanel.run(AppletPanel.java:434) 
    at java.lang.Thread.run(Thread.java:722) 

的Java源代碼如下

import java.awt.*; 
import java.applet.*; 
import java.io.*; 
import java.net.*; 
import javax.swing.*; 

public class jclientbare extends Applet { 


    static BufferedReader in; 
    static PrintStream out; 

    public void init() { 

     try { 
       System.out.println("Test NN"); 
      Socket socket = new Socket("localhost", 4000); 
     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      out = new PrintStream(socket.getOutputStream(), true); 
     } 

     catch (UnknownHostException e) { 

     JOptionPane.showMessageDialog(null, "Unknown Host.."); 
      System.out.println("Unknown host: kq6py"); 

      } catch (IOException e) { 

     JOptionPane.showMessageDialog(null, "NO IO."); 
      System.out.println("No I/O"); 
     } 
    } 

} 

Java小程序不註冊錯誤消息的連接,它只是炸彈。任何幫助,將不勝感激!我認爲這可能是java.policy的問題,但我不知道如何解決它。

呃,你如何做一個堆棧跟蹤?

回答

2

嘗試使用此方法授予權限:

grant 
{ 
    permission java.net.SocketPermission 
    "127.0.0.1:4000", "connect,resolve"; 
}; 

有關詳細信息有關授予權限,您可以查看以下鏈接: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

文章解釋很好地在政策文件(S)位於以及如何運行具有特定策略文件的應用程序。

以下鏈接細節在哪裏可以找到政策文件,並在該策略文件被加載順序: http://download.java.net/jdk8/docs/technotes/guides/security/PolicyFiles.html#DefaultLocs

據我瞭解,如果你是Windows,那麼你可以將一個文件「 .java.policy'放入'我的文檔'文件夾中。當你在瀏覽器中運行一個applet時,它會找到這個策略文件作爲用戶策略文件。

+0

哪些政策文件是否將此文本添加到? – Confident

+0

如果我想要一個特定的策略文件,我如何將額外的java參數添加到要從瀏覽器啓動的applet – Confident

+0

還有java.security – Confident

2
System.exit(1); 

即使信任的小程序也不能調用System.exit(int)。沒有安全管理器的小程序不應該呼叫虛擬機結束。這就像客人燒燬賓館。

這將是更好的做一些事情,如:

URL crash = new URL(getCodeBase(), "crash.html"); 
getAppletContext().showDocument(crash); 

而忽略有關政策文件的東西。他們沒有解決任何真實世界(野外網絡)部署。

+0

感謝您的性反應。我的IDE說,問題是「套接字套接字=新套接字(地址,4000);」如果我在罐子上簽字,那是否是最好的行動方案,還是應該採取其他措施?我嘗試過,但我可以繼續追求 – Confident

+0

格式化的抱歉,但我刪除了System.exit行,我仍然得到相同的錯誤。沒有我沒有看到任何對話只是同樣的錯誤 – Confident

+0

我很欣賞你的考慮...我在這裏有點不知所措 – Confident

0

啊哈!我知道你不能在發送給你類文件的同一個源代碼上運行一個applet。安裝Lighttpd後,我可以通過http://localhost/index.htm進入我的小程序。希望這會幫助別人!