URL连接无法在applet中运行

时间:2012-05-26 14:01:30

标签: java security applet request bufferedreader

我正在尝试在java applet中运行此代码:

package test;
import java.applet.Applet;

import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class DrawExample extends Applet {
    public void paint(Graphics g) {
        try {
            g.drawString("CODE:",50, 30);
            URL yahoo = new URL("http://www.yahoo.com/");
            URLConnection yc = yahoo.openConnection();      
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
            String inputLine;
            int i=65;
            while ((inputLine = in.readLine()) != null) {
                g.drawString(inputLine,50, i);
                i=i+15;
            }
            in.close();
         } catch (Exception e) {
             e.printStackTrace();
         }          
    } 
}

如果我从Eclipse运行此代码作为applet,它运行正常,但是如果我试图在网页中运行它,我只得到" CODE:"。代码冻结在这一行:

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

任何人都知道我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

这是签名小程序吗?未签名的Applet可以从发起它们的服务器打开网络连接。然后,Applet安全模型不允许打开与非始发服务器的网络连接

在这里查看http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

要确认这一点,您可以尝试从托管此applet的服务器打开流。

答案 1 :(得分:1)

您需要签署您的Java小程序。它在Eclipse中运行时有效,因为eclipse创建了一个名为 java.policy.applet 的文件,其中包含以下内容。

/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
/* DO NOT EDIT */

grant {
  permission java.security.AllPermission;
};

为了让你的applet在Eclipse之外运行,你必须签名:

  1. 编译applet - javac Applet.java
  2. 制作一个JAR文件 - jar cvf Applet.jar Applet.class
  3. 生成密钥
  4. 签署JAR文件
  5. 导出公钥证书 ...
  6. 它一直持续下去,这是一个非常漫长的过程。您可以按照in this page

    的所有步骤操作