2016-07-30 75 views
0

我決定嘗試使用JavaFX,因爲我所知道的所有圖形方式都是Swing,因爲這是我在大學早期學到的,這就是我一直在使用的開發遊戲。但是,我在開始時遇到了一些麻煩,希望以前有人遇到過這些問題,以便我可以糾正它們。無法運行簡單的JavaFX程序

當我第一次啓動時,我打開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 = [email protected][styleClass=root], node = [email protected][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(); 
    } 
} 
+0

請看看這個。我認爲這個教程將會有所幫助。 http://code.makery.ch/library/javafx-8-tutorial/part1/ – sarvajeetsuman

回答

2

這是什麼呢?

root.getChildren().add(root);

檢查它是你的程序,而不是Java類錯誤的路線。 (最ide的,你可以點擊它)

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

我沒有計算,但我假設只是一個錯誤的類型。你可能想要添加畫布。不知道你是否需要畫布,你主要用JavaFX繪製節點。

+0

WOW!我很傻...我應該添加畫布,而不是根。 –

+0

@DarinBeaudreau我相信你會發現錯誤,我只是指出如何使用堆棧跟蹤(錯誤消息)來找出錯誤。您只需閱讀由錯誤引起的最後一個'由'引起的'孩子:檢測到週期:',您就會知道錯在哪裏。 – brian