2016-07-30 2 views
0

JavaFX로 놀아보기로 결정한 이유는 그래픽 적으로 알려진 모든 것이 Swing이기 때문에 대학 시절에 배웠던 것입니다. 게임 개발. 그러나, 나는 시작하는 데 약간의 어려움을 겪었고, 누군가가이 문제를 겪어서 해결할 수 있기를 바랬습니다.간단한 JavaFX 프로그램을 실행할 수 없습니다.

내가 처음 시작했을 때, 핵심 라이브러리이기 때문에 Eclipse로 바로 이동할 수있을 것으로 기대했지만, 라이브러리 가져 오기에서 구문 오류 강조 표시를 보았을 때 Eclipse (또는 Java)에서는 jfxrt.jar 라이브러리에 액세스 할 수 없습니다. 인터넷 검색 후 Eclipse 용 e (fx) 클립se 플러그인을 다운로드하여이 문제를 해결할 수있었습니다. 이를 통해 공백의 창을 보여주는 매우 간단한 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);

확인은 프로그램이 아니라 자바 클래스의 오류의 라인. (대부분의 ide는 단지 그것을 클릭 할 수 있습니다)

이 줄. at FXMain.start(FXMain.java:23)

나는 계산하지 않았지만 잘못된 유형이라고 가정합니다. 캔버스를 추가하려고합니다. 어쨌든 캔버스가 필요하지는 않은지, 주로 JavaFX에서 노드를 사용하여 그립니다.

+0

와우! 나는 매우 어리 석다. 나는 루트가 아닌 캔버스를 추가해야한다. –

+0

@DarinBeaudreau 실수로 스택 추적 (오류 메시지)을 사용하는 방법을 지적하고 있습니다. 오류에서부터 '원인으로 인한 마지막'까지 읽었을 때'어린이 :주기가 감지되었습니다 :'를보고 무엇이 잘못되었는지를 알 수 있습니다. – brian

관련 문제