簡體   English   中英

無法運行簡單的JavaFX程序

[英]Can't run simple JavaFX programs

我決定使用JavaFX,因為我所知道的圖形方面的所有東西都是Swing,因為那是我在大學早期學習的東西,而這正是我在開發游戲時一直使用的東西。 但是,我在入門時遇到了一些麻煩,希望有人之前遇到過這些問題,以便我可以糾正它們。

剛開始時,我打開了Eclipse(Mars),因為它是一個核心庫,因此希望能夠直接跳入它,但是當我看到該庫的導入中突出顯示語法錯誤時,似乎是Eclipse(或Java)不允許您訪問jfxrt.jar庫。 谷歌搜索了一下之后,我能夠通過下載Eclipse的e(fx)clipse插件來糾正這一問題。 這使我可以創建一個非常簡單的JavaFX應用程序,該應用程序僅顯示一個空白窗口。

但是,當嘗試渲染簡單的圖形基元(矩形)時,出現了一個異常,即Google似乎表明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();
    }
}

這是做什么的

root.getChildren().add(root);

在您的程序而非Java類中檢查錯誤所在的行。 (大多數想法是,您只需單擊它)

這條線。 at FXMain.start(FXMain.java:23)

我沒有數,但我只是假設是錯誤的類型。 您可能要添加畫布。 不確定是否仍需要畫布,而是主要使用JavaFX繪制節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM