java.awt.Robot
LinuxでOpenJDK 11 を使用して画面キャプチャーを作成しています。Linuxでの結果は完全に黒い画像です。同じコードがUbuntuとWindowsで機能します(もちろん別のファイルパスを使用します)。
どんな手掛かり?
public void captureScreen() throws AWTException {
Robot robot = new Robot(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice());
BufferedImage screen = robot.createScreenCapture(new Rectangle(getDefaultToolkit().getScreenSize()));
try {
ImageIO.write(screen, "jpg", new File("/tmp/screenshot.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
更新: この問題の原因は、OpenJDKとWaylandの組み合わせにあります。Oracle JDK / JRE(13.0.1)では、すべてが正常に動作します。
私には問題なく動作します(Ubuntu 18.04のOpenJDK 11.0.4 2019-07-16)。
—
ロバート
奇妙なことに、私はOpenJDK 11.0.5 2019-10-15をDebian 10(Buster)で使用しています。それで、問題はデスクトップ環境に関連している可能性がありますか?
—
レト
xubuntu、つまりXFCEを試してみました。デスクトップ環境が違いを生むとは思えません。
—
ロバートは
お疲れ様でした!私はAppArmorを原因と考え、アンインストールしましたが、何も変わりませんでした。
—
レト
何らかの理由で複数のグラフィックデバイスがあり、Javaが「デフォルト」ではないデバイスを表示している可能性はありますか?たぶん、すべてのスクリーンショットを試してください
—
ug_
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()