私の古いJavaアプリケーションをswingからjavafxに変換していますが、問題が発生しています。OSXのJavaFXスクリーンキャプチャヘッドレス例外
私は、スクリーンショットをキャプチャするために、次のコードを使用しています:
public ScreenCapper() {
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gs = ge.getScreenDevices();
try {
robot = new Robot(gs[gs.length-1]);
} catch (AWTException e) {
LOGGER.getInstance().ERROR("Error creating screenshot robot instance!");
}
}
public Color capture() {
Rectangle bounds;
mode = gs[0].getDisplayMode();
bounds = new Rectangle(0, 0, mode.getWidth(), mode.getHeight());
//......
}
Windowsでアプリケーションを実行するときにこれが正常に動作します。次の例外を取得してOSXの下で実行している場合しかし:
013-03-10 10:44:03.795 java[1912:5903] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead.
2013-03-10 10:44:05.472 java[1912:707] [JRSAppKitAWT markAppIsDaemon]: Process manager already initialized: can't fully enable headless mode.
は、いずれかがあります:
をException in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.awt.HeadlessException
at sun.java2d.HeadlessGraphicsEnvironment.getScreenDevices(HeadlessGraphicsEnvironment.java:72)
at be.beeles_place.roggbiv.utils.ScreenCapper.<init>(ScreenCapper.java:33)
at be.beeles_place.roggbiv.modes.AverageColorMode.start(AverageColorMode.java:31)
at be.beeles_place.roggbiv.modes.ColorModeContext.startCurrentColorMode(ColorModeContext.java:28)
at be.beeles_place.roggbiv.controller.RoggbivController.<init>(RoggbivController.java:42)
at be.beeles_place.roggbiv.RoggbivMain.start(RoggbivMain.java:67)
at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
次のデバッグの警告が示唆するように私はJavaFXのはappearentlyランニングでTODOを持っていると思うこれは、OSX上でヘッドレスモードでありますこれを動作させる方法は?あるいは、OSXと矛盾しないスクリーンショットをキャプチャする別の方法は?それは純粋なJavaFXアプリケーションで開始されていないので、https://github.com/beele/Roggbiv
を*なぜ地球上で、それはそれを行うだろう*「私はJavaFXのはappearentlyランニングでTODOを持っていると思うこれはOSX上のヘッドレスモードですか」?これはGUIツールキットであり、スクリーンなしではほとんど使用されません。 –
私は、GraphicsEnvironment.isHeadless()のgithubチェックのコードにチェックを追加して、trueを返します。 – Beele