无法运行简单的JavaFX程序

时间:2016-07-30 02:36:52

标签: java eclipse javafx

我决定玩JavaFX,因为我所知道的所有图形都是Swing,因为那是我在大学早期所学到的,那就是我和#39 ;一直用于开发游戏。但是,我在开始时遇到了一些麻烦,希望有人在遇到这些问题之前我可以纠正它们。

当我刚开始时,我打开Eclipse(Mars)期望能够直接进入它,因为它是一个核心库,但是当我看到库的导入语法错误突出显示时,似乎Eclipse(或Java)不允许您访问jfxrt.jar库。经过一些谷歌搜索,我能够通过下载Eclipse的e(fx)clipse插件来纠正这个问题。这使我能够创建一个非常简单的JavaFX应用程序,只显示一个空白窗口。

然而,当尝试渲染一个简单的图形基元(一个矩形)时,我得到了一个例外,谷歌似乎表明这是API本身的一个问题。有没有人之前遇到过这个异常,有什么办法可以让JavaFX正常工作,所以我真的可以开始玩了吗?

Exception in Application start method java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Children: cycle detected: parent = Group@1c73f0a[styleClass=root], node = Group@1c73f0a[styleClass=root]
    at javafx.scene.Parent$2.onProposedChange(Parent.java:445)
    at com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:206)
    at FXMain.start(FXMain.java:23)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    ... 1 more
Exception running application FXMain

这是我的计划......

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class FXMain extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        stage.setTitle("Java FX Example");

        Group root = new Group();
        Scene scene = new Scene(root);
        stage.setScene(scene);

        Canvas canvas = new Canvas(640, 480);
        root.getChildren().add(root);

        GraphicsContext gc = canvas.getGraphicsContext2D();

        gc.setFill(Color.RED);
        gc.setStroke(Color.BLACK);
        gc.setLineWidth(2);
        gc.fillRect(10, 10, 50, 50);
        gc.strokeRect(10, 10, 50, 50);

        stage.show();
    }
}

1 个答案:

答案 0 :(得分:2)

这是做什么的?

root.getChildren().add(root);

检查错误行,它是你的程序,而不是java类。 (大多数ide你可以点击它)

这一行。 at FXMain.start(FXMain.java:23)

我没有数,但我假设只是一个错误的类型。您可能想要添加画布。无论如何你都不确定是否需要画布,你主要使用JavaFX中的节点进行绘制。