0

我在更新 Java 后开始出现问题(我认为)当我尝试连接到我的 Cpp 服务器(这似乎工作正常)时,我收到一条错误消息,我找不到任何帮助。

以下是错误消息

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 的问题,但我不知道如何解决它。

呃,你如何进行堆栈跟踪?

4

3 回答 3

2

试试这个来授予权限:

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

有关授予权限的详细信息,您可以查看以下链接:http: //java.sun.com/developer/onlineTraining/Programming/JDCBook/appA.html

这篇文章很好地解释了策略文件的位置以及如何使用特定的策略文件运行应用程序。

以下链接详细说明了在哪里可以找到策略文件以及加载策略文件的顺序: //download.java.net/jdk8/docs/technotes/guides/security/PolicyFiles.html#DefaultLocs

据我了解,如果您在 Windows 中,那么您可以在您的“我的文档”文件夹中放置一个文件“.java.policy”。当你在浏览器中运行一个小程序时,它会发现这个策略文件作为用户策略文件。

于 2012-09-10T04:12:45.013 回答
2
System.exit(1);

即使是受信任的小程序也无法调用System.exit(int). 没有安全管理器的小程序不应要求 VM 结束。这就像客人烧毁了宾馆。

最好执行以下操作:

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

并忽略有关策略文件的内容。它们不能解决现实世界(野生网络)部署的任何问题。

于 2012-09-10T05:53:30.067 回答
0

啊哈!我了解到您不能在向您发送类文件的同一源上运行小程序。安装 Lighttpd 后,我可以使用http://localhost/index.htm. 希望这对其他人有帮助!

于 2012-09-10T14:18:04.280 回答