加载已签名的jar时出现java.lang.reflect.InvocationTargetException

时间:2013-03-17 17:05:48

标签: java security applet invocationtargetexception signed-applet

我正在尝试拍摄桌面的屏幕截图并将其上传/保存到某处。示例代码如下所示。 java文件是:

public class ScreenShot extends Applet
{
    ScreenShotThread t = new ScreenShotThread();
    public void init()
    {       
        t.start();
    }

    public boolean mouseDown(Event e,int x, int y)
    {
        t.stop();
        return true;
    }
}

线程类如下所示:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.imageio.ImageIO;

public class ScreenShotThread extends Thread
{
    String request = "xxxx";
    public void run()
    {
        try 
        {
            Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
            Robot screenshot = new Robot();
            BufferedImage screenImage = screenshot.createScreenCapture(new 
                        Rectangle(d));
            sendBufferedImage(request, screenImage);
            sleep(1000);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        } 
    }

    public void sendBufferedImage(String urlpath, BufferedImage screenImage) throws   
        Exception
    {
        URL url = new URL(urlpath);
                URLConnection urlcon = url.openConnection();
                urlcon.setDoOutput(true);
                OutputStream out = urlcon.getOutputStream();
        ImageIO.write(screenImage, "jpg", out);
        out.close();        
    }
}

其中,我创建了一个jar文件,它只包含一个类文件,即applet的文件,即“ScreenShot”。我已经签署了jar文件并将其包含在HTML中以便像这样调用

<html>
    <applet code="ScreenShot.class" archive="ScreenShot.jar"/>
    </applet>
</html>

当我运行html时,我收到安全警告,一旦我接受风险,我就会收到此错误。 java.lang.reflect.InvocationTargetException。我观察到的是,这个错误不是源于我编写的代码,因为我在java控制台上看不到上面文件中使用的任何SOP。

有趣的是,如果我没有签署我的applet,那么我在ScreenShotThread类中初始化机器人类时会遇到安全异常。

0 个答案:

没有答案