我使用以下代码执行Java类来捕获屏幕截图:
import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class FullScreenCapture extends JFrame {
private static final long serialVersionUID = 1L;
public static String capture() {
FullScreenCapture f = new FullScreenCapture();
String Ret;
try {
Thread.sleep(5000);
System.setProperty("java.awt.headless", "true");
Robot robot = new Robot();
String fileName = "D://FullScreenshot.jpg";
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit()
.getScreenSize());
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
System.out.println("Headless mode: " + ge.isHeadless());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, "jpg", new File(fileName));
Ret ="Capture Saved Successfully";
} catch (Exception e) {
System.out.println("Exception occurred");
Ret ="Wrong Error";
}
return Ret;
}
}
该程序在netbeans或cmd中执行时没有任何问题,
但是当将java类的java加载到oracle数据库中时
调用它作为函数,返回错误消息java.awt.HeadlessException
答案 0 :(得分:0)
您正在使用java.awt.Robot
,它需要一个图形化,无头的环境才能工作。根据{{3}}:
AWTException-如果平台配置不允许低级输入控制。当GraphicsEnvironment.isHeadless()返回true时,总是抛出此异常
Oracle数据库服务器未提供图形环境,因此无法运行您的代码。根据{{3}} Oracle文档:
Oracle数据库在服务器上提供了所有核心Java类库,包括与用户界面表示相关的类。但是,在服务器上运行的代码尝试在服务器上实现或显示用户界面是不合适的。不应期望或不允许在Oracle JVM环境中运行应用程序的用户与运行Oracle数据库的服务器的显示和输入硬件进行交互或依赖它们。