相关疑难解决方法(0)

JavaFX 2.1:工具包未初始化

我的应用程序是基于Swing的.我想介绍JavaFX并将其配置为在辅助显示器上呈现场景.我可以使用JFrame来保存一个可以容纳JFXPanel的JFXPanel,但我想用JavaFX API实现这个目的.

子类化com.sun.glass.ui.Application并使用Application.launch(this)不是一个选项,因为调用线程将被阻止.

从Swing EDT实例化一个舞台时,我得到的错误是:

java.lang.IllegalStateException: Toolkit not initialized
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?


编辑:结论

问题:非平凡的Swing GUI应用程序需要运行JavaFX组件.应用程序的启动过程在启动从属服务层后初始化GUI.

解决方案

子类JavaFX Application类并在单独的线程中运行它,例如:

public class JavaFXInitializer extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        // JavaFX should be initialized
        someGlobalVar.setInitialized(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

旁注:因为Application.launch()方法接受一个Class<? extends Application>参数,所以必须使用全局变量来表示JavaFX环境已被初始化.

替代方法:在Swing Event Dispatcher Thread中实例化JFXPanel:

final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        new JFXPanel(); // initializes JavaFX environment
        latch.countDown();
    }
});
latch.await();
Run Code Online (Sandbox Code Playgroud)

通过使用此方法,调用线程将等待,直到设置JavaFX环境.

选择您认为合适的解决方案.我选择了第二个,因为它不需要一个全局变量来表示JavaFX环境的初始化,也不会浪费一个线程.

javafx-2

56
推荐指数
4
解决办法
6万
查看次数

从javafx平台runlater返回结果

我正在研究JavaFX应用程序,在我的场景中是显示在JavaFX中创建的密码提示,它带有两个选项的密码OKCancel.我已经返回了用户输入的密码.

我的密码对话框是 -

public static String showPasswordDialog(String title, String message, Stage parentStage, double w, double h) {
    try {
        Stage stage = new Stage();
        PasswordDialogController controller = (PasswordDialogController) Utility.replaceScene("Password.fxml", stage);
        passwordDialogController.init(stage, message, "/images/password.png");
        if (parentStage != null) {
            stage.initOwner(parentStage);
        }
        stage.initModality(Modality.WINDOW_MODAL);
        stage.initStyle(StageStyle.UTILITY);
        stage.setResizable(false);
        stage.setWidth(w);
        stage.setHeight(h);                
        stage.showAndWait();
        return controller.getPassword(); 
    } catch (Exception ex) {
         return null;
    }
Run Code Online (Sandbox Code Playgroud)

我的代码显示密码提示的位置如下,实际上这个提示将显示在其他UI上,所以我需要将其包含在内部Platform.runlater(),否则它会抛出Not on FX application thread.我需要这个密码提示才能显示,直到我得到正确的密码提示.如果我在runlater中显示密码,我怎样才能获得密码值.

还有其他更好的方法吗?

final String sPassword = null;

          do {
            Platform.runLater(new Runnable() { …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-2

15
推荐指数
2
解决办法
1万
查看次数

使用Java FX在服务器端生成映像

目前我正在研究Jax Rs应用程序,我想将Base64编码的图像输出到客户端.客户端是移动设备.

移动设备将使用一些参数调用此服务,服务器必须绘制条形图并将其作为base64编码的图像字符串发送回设备.

由于java Fx具有所需的图表库,我使用以下教程做了一个示例."快照"功能也按预期正常工作(创建屏幕图像).

http://docs.oracle.com/javafx/2/charts/bar-chart.htm#CIHJFHDE

现在我想在不扩展Application类的情况下这样做,因为我需要在Jax Rs应用程序中使用它.这样我就可以使用api创建一个BuffredImage然后用它来创建Base64字符串.

我找到了一种使用JFreeChart做到这一点的方法.但我更喜欢我能用Java FX做到这一点.我没有任何Java Fx的经验

请指教

java javafx javafx-2

7
推荐指数
1
解决办法
2997
查看次数

JavaFx处于无头模式

是否可以在无头模式下运行JavaFx(在Java 7中)?它用于在服务器上生成图像,但是要求使用X-Server.在JavaFx中是否存在类似java.awt.headless的东西?(我不能使用Xvfb)

javafx

6
推荐指数
1
解决办法
5989
查看次数

javafx快照没有显示应用程序或场景

您好我正在使用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)

java screenshot javafx embedded-browser

4
推荐指数
1
解决办法
5205
查看次数

标签 统计

javafx ×4

javafx-2 ×3

java ×2

embedded-browser ×1

screenshot ×1