2017-10-07 88 views
0

上午/下午的JavaFX - java.lang.reflect.InvocationTargetException

Main.java

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application{ 
    public static void main(String[] args) { 

     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 


     Parent root = FXMLLoader.load(getClass().getResource("Splash.fxml")); 
     Scene scene = new Scene(root); 
     primaryStage.setTitle("My Title"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

Splash.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import com.gluonhq.charm.glisten.control.TextField?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.image.Image?> 
<?import javafx.scene.image.ImageView?> 
<?import javafx.scene.layout.BorderPane?> 
<?import javafx.scene.layout.Pane?> 
<?import javafx.scene.layout.VBox?> 

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller"> 
    <top> 
     <ImageView fitHeight="96.0" fitWidth="600.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER"> 
     <image> 
      <Image url="@Hangman.png" /> 
     </image> 
     <BorderPane.margin> 
      <Insets left="20.0" top="50.0" /> 
     </BorderPane.margin> 
     </ImageView> 
    </top> 
    <center> 
     <VBox alignment="CENTER" spacing="15.0"> 
     <children> 
      <TextField maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" promptText="Username" /> 
      <TextField layoutX="236.0" layoutY="10.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" promptText="Password" /> 
      <Button mnemonicParsing="false" onAction="#testClick" text="Enter" /> 
     </children> 
     <BorderPane.margin> 
      <Insets top="20.0" /> 
     </BorderPane.margin> 
     </VBox> 
    </center> 
    <bottom> 
     <Pane BorderPane.alignment="CENTER"> 
     <children> 
      <Label alignment="CENTER" contentDisplay="CENTER" layoutX="279.0" text="Sign Up"> 
       <padding> 
        <Insets bottom="20.0" /> 
       </padding> 
      </Label> 
     </children> 
     </Pane> 
    </bottom> 
</BorderPane> 

控制器

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.Label; 
import java.util.Random; 

public class Controller { 

    public void testClick() { 

     System.out.println("test"); 
    } 



} 

我得到错误“java .lang.reflect.InvocationTargetException”。通过论坛拖网时间。生成的FXML代码我使用了Scene Builder,并且所有SEEMS都处于正常工作状态。问题来自哪里?我怎样才能在将来阻止它?

感谢您的帮助!

+1

你应该张贴例外摆在首位。但我怀疑你的问题可能来自使用Gluon'TextField'? –

+0

看来是对的!删除它,并加载,为什么这个错误发生? – BenjaminBarnes

+0

由于您添加了错误的“TextField”:除非您正在创建Gluon移动项目,否则您的JavaFX桌面应用程序不包含Gluon Mobile库。 –

回答

1

如果您在您的FXML文件导入列表中你有:

<?import com.gluonhq.charm.glisten.control.TextField?> 
<?import javafx.geometry.Insets?> 
... 

所以,除非你正在创建一个胶子Mobile项目,JavaFX应用程序将不包括胶子的流动图书馆,它会失败找到com.gluonhq.charm.glisten.control.TextField控制权,投掷InvocationTargetException

你只需要使用JavaFX的内置控制,从控制选项卡:

相关问题