2016-04-12 89 views
1

這是我的第一個問題,所以如果出了什麼問題,不要生我的氣。我目前在JavaFx的幫助下編寫了一個空閒的Java遊戲。 這裏的代碼是用eclipse mars和JavaFx編寫的。 Eclipse的表演對我來說,代碼是正確的,但是當我要啓動的程序,它拋出的錯誤消息塊:JavaFx程序拋出java.lang.reflect.InvocationTargetException

public class Main extends Application{ 

private static final Color color = Color.web("#464646"); 
Button button3 = new Button("D"); 
DropShadow shadow = new DropShadow(); 
Label label = new Label(); 

public static void main(String[] args) throws Exception { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    Scene scene = new Scene(new Group()); 
    primaryStage.setTitle("Button Sample"); 
    primaryStage.setWidth(300); 
    primaryStage.setHeight(190); 

    label.setFont(Font.font("Times New Roman", 22)); 
    label.setTextFill(color); 

    Image imageDecline = new Image(getClass().getResourceAsStream("../not.png")); 
    Image imageAccept = new Image(getClass().getResourceAsStream("../ok.png")); 

    VBox vbox = new VBox(); 
    vbox.setLayoutX(20); 
    vbox.setLayoutY(20); 
    HBox hbox1 = new HBox(); 
    HBox hbox2 = new HBox(); 

    Button button1 = new Button("Accept"); 
    button1.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;"); 
    button1.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      label.setText("Accepted"); 
     } 
    }); 

    Button button2 = new Button("Accept"); 
    button2.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      label.setText("Accepted"); 
     } 
    }); 

    button3.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      label.setText("Declined"); 
     } 
    }); 

    button3.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent e) { 
      button3.setEffect(shadow); 
     } 
    }); 

    button3.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent e) { 
      button3.setEffect(null); 
     } 
    }); 

    hbox1.getChildren().add(button2); 
    hbox1.getChildren().add(button3); 
    hbox1.getChildren().add(label); 
    hbox1.setSpacing(10); 
    hbox1.setAlignment(Pos.BOTTOM_CENTER); 

    Button button4 = new Button(); 
    button4.setGraphic(new ImageView(imageAccept)); 
    button4.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      label.setText("Accepted"); 
     } 
    }); 

    Button button5 = new Button(); 
    button5.setGraphic(new ImageView(imageDecline)); 
    button5.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent e) { 
      label.setText("Declined"); 
     } 
    }); 

    hbox2.getChildren().add(button4); 
    hbox2.getChildren().add(button5); 
    hbox2.setSpacing(25); 

    vbox.getChildren().add(button1); 
    vbox.getChildren().add(hbox1); 
    vbox.getChildren().add(hbox2); 
    vbox.setSpacing(10); 
    ((Group) scene.getRoot()).getChildren().add(vbox); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
}} 

我希望有人在這裏有一個暗示或者一個解決這個問題:)將是非常對你很好。

最好的問候, 邁克

+4

請編輯您的問題以包含完整的堆棧跟蹤。如果你能確定[哪一行拋出了異常](http://stackoverflow.com/questions/3988788)也是有幫助的。 –

+0

所有軟件包都可以正確導入。 –

回答

1

我認爲你的問題與輸入做流您使用創建Image對象:

... = new Image(getClass().getResourceAsStream("../not.png")); 

當我在Eclipse中啓動應用程序,我得到一個InvocationTargetException也是如此。它是由NullPointerException導致的,因爲無法找到PNG文件。

嘗試在不創建Image對象的情況下啓動應用程序並查看是否仍有任何異常。

+0

感謝您的反饋,我檢查了它,它沒有PNG的工作...這是PNG的標準文件路徑?包的根目錄C oder src文件夾? –

+0

您可以使用相對或絕對路徑。如果您使用相對路徑(例如「not.png」),那麼將會查找「not.png」文件相對於您的類文件所在的文件夾。更多信息可以在這裏找到(https://stackoverflow.com/questions/676250/different-ways-of-loading-a-file-as-an-inputstream)。 – Uwe

相關問題