2016-05-03 99 views
1

我尝试通过FXML文件将项目添加到组合框中,但出现此错误。无法将项目添加到Combobox

javafx.fxml.LoadException: String is not a valid type. 
/C:/Users/kim/Desktop/JavaFX/ComboboxFx/bin/application/Main.fxml:13 

    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
    at javafx.fxml.FXMLLoader.createElement(Unknown Source) 
    at javafx.fxml.FXMLLoader.processStartElement(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at application.Main.start(Main.java:13) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

这里是我的FXML

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

<?import javafx.collections.FXCollections?> 
<?import javafx.scene.control.ComboBox?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" > 
    <children> 
     <ComboBox fx:id="comboBox"> 
     <items> 
      <FXCollections fx:factory="observableArrayList"> 
       <String fx:value = "Gilbert" /> 
       <String fx:value = "John" /> 
      </FXCollections> 
     </items> 
     </ComboBox> 
     <Label fx:id="selection" layoutX="34.0" layoutY="65.0" prefHeight="17.0" prefWidth="102.0" text="Label" /> 
    </children> 
</AnchorPane> 

主要

package application; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml")); 
      Scene scene = new Scene(root,400,400); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

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

,当我通过现场Builder中打开它,我得到这个错误

java.io.IOException: javafx.fxml.LoadException: Invalid attribute. 

我仔细检查过的一切但代码似乎很好。当我删除我想要添加到FXML的值时,错误消失,但是我的组合框变空了。它说String不是一个有效的类型。我怎么解决这个问题?为什么它是无效的?我在这里查了类似的问题,但是错误是由于没有导入FXCollections导致的。我导入它,所以我认为这个错误不是由不良导入造成的。

回答

4

添加

<?import java.lang.String?>

您FXML。