我正在尝试拍摄桌面的屏幕截图并将其上传/保存到某处。示例代码如下所示。 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类中初始化机器人类时会遇到安全异常。