我正在将我的旧Java应用程序从swing转换为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());
//......
}
Run Code Online (Sandbox Code Playgroud)
这在Windows下运行应用程序时工作正常.但是,在OSX下运行时会出现以下异常:
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) …Run Code Online (Sandbox Code Playgroud) 这可能听起来很奇怪,但我想使用JavaFX在服务器端生成我的图表图像.因为JavaFX具有很好的canvas API来执行图像转换连接和定位.
特别是我有一个spring MVC服务来生成我的图表作为图像.主要问题是如何从方便的Spring bean调用javaFX API.如果我尝试从java应用程序(不扩展javaFX Application类)运行javafx代码,我得到
java.lang.IllegalStateException: Toolkit not initialized
Run Code Online (Sandbox Code Playgroud)
您有任何建议/想法如何解决这个问题?
我有一个简单的JavaFx应用程序(Java 8),它使用TestFx进行单元测试.但是,运行测试时,应用程序窗口会启动并移动鼠标以执行我的测试中的任何操作.这些测试能否以应用程序不弹出的方式运行,我仍然可以在自动构建和测试运行时将鼠标用于其他事情?
您好我正在使用JavaFx WebView创建HTML页面的屏幕截图,它工作正常,但我想知道是否可以这样做而无需在图形Windows中启动应用程序!我的意思是没有更多的轻量级方法来获取截图然后这个:
public class WebViewSample extends Application {
private Scene scene;
@Override
public void start(Stage stage) {
// create scene
scene = new Scene(new Browser(snapshot), 750, 500, Color.web("#666970"));
stage.setScene(scene);
// show stage
stage.show();
}
WritableImage snapshot;
public static void main(String[] args) {
launch(args);
System.err.println("launched!");
}
}
class Browser extends Region {
final ImageView selectedImage = new ImageView();
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
private final WritableImage snapshotImage;
public Browser(WritableImage snapshot) {
this.snapshotImage= snapshot;
// process …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个应用程序,它应该能够在仅 CLI 环境以及 GUI 启用模式下运行。由于我的一些工作是由 JavaFX 线程完成的,因此我需要在不启动图形引擎的情况下启动 JavaFX 主线程,因为这会在仅 CLI 环境中崩溃。我该怎么做呢?
我已经编写了第一个主类,它将使用命令行参数决定 GUI 是否启动或者应该在 CLI 模式下运行。GUI 已经可以工作了,我只需要弄清楚如何在另一个类中运行没有 GUI 的 FX 主线程。
- - - 编辑 - - -
进一步说明:
假设我有 2 个 UI、1 个 CLI 和 1 个 GUI。代码被切分为 UI 处理和操作。UI 处理仅在 CLI 模式下解析命令行参数并在 GUI 模式下绘制 GUI。按钮事件只会从操作类中调用代码。
此问题和解答显示了我的操作段代码参考中的哪些代码
我现在尝试在 CLI 界面中重用操作代码。那里的代码被缩短了,将 create 方法视为更多代码。
如上所述,CLI 模式是为无法启动图形环境的环境而设计的。尝试从 Application 继承并实现该start (Stage s)方法将导致
UnsupportedOperationException : unable to open DISPLAY即使该阶段在启动方法中被忽略
---第二次编辑---
采用[此处] 1中描述的代码考虑我createKey(length)不想从按钮
调用,而是从仅命令行的第二个UI调用
private static void progressBar(Task …Run Code Online (Sandbox Code Playgroud) java ×4
javafx ×4
javafx-2 ×2
awt ×1
javafx-8 ×1
macos ×1
screenshot ×1
spring ×1
testfx ×1
unit-testing ×1