Mac 上的全屏捕获是否无法使用 JavaFX 正常工作?

问题描述 投票:0回答:1

我有一个在线部署的应用程序,目前它只能在 Windows 操作系统上按预期运行。我正在尝试制作也可以在 Mac OS 上运行的应用程序,但问题是所有最大化的应用程序(如 Finder 或 IDE 本身)都不包含在捕获中,它只是捕获了背景。 (请参阅从下面的代码中截取的屏幕截图

我希望将打开或最大化的应用程序包含在屏幕截图中,但所有这些都无法使用下面的代码工作。

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class ScreenCapture extends Application {

    @Override
    public void start(Stage primaryStage) {
        captureScreenshot();
    }

    private void captureScreenshot() {
        List<Screen> screens = Screen.getScreens();
        for (int i = 0; i < screens.size(); i++) {
            Screen screen = screens.get(i);
            Rectangle2D bounds = screen.getBounds();
            Robot robot = new Robot();
            WritableImage screenshot = robot.getScreenCapture(null, bounds);
            BufferedImage image = javafx.embed.swing.SwingFXUtils.fromFXImage(screenshot, null);
            try {
                ImageIO.write(image, "png", new File("screenshot" + i + ".png"));
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我尝试在 Google、Youtube 甚至 chatgpt 上寻找答案,但找不到任何解决方案。

java macos javafx screenshot
1个回答
0
投票

从 macOS 10.15 Catalina 开始,您需要获得“隐私和安全权限”才能捕获 Mac 上的屏幕。如果不允许应用程序录制屏幕,它将接收桌面。 通常,第一次使用屏幕录制 API 时会向用户显示一个对话框,但我不知道这是如何在 JavaFX 中实现的 - 可能是请求被默默拒绝。在这种情况下 - 或者如果用户拒绝了请求 - 您必须指示他们

执行适当的操作

。请注意,您的应用程序必须重新启动才能使录音权限生效。

© www.soinside.com 2019 - 2024. All rights reserved.