[英]Cannot locate the fxml error for JavaFX
我正在嘗試實現此處所述的多語言支持解決方案。
但我得到“java.lang.NullPointerException:位置是必需的。” 請在以下相關代碼中指出缺陷。 謝謝
MultiLanguageSupport.java
public class MultiLingualSupport extends Application {
Stage currentStage;
void setStage(Stage stage)
{
currentStage=stage;
}
@Override
public void start(Stage stage) throws Exception {
setStage(stage);
replaceScene("LanguageUIFXML.fxml",this,new Locale("en","EN"));
}
public static void main(String[] args) {
launch(args);
}
public void replaceScene(String fxml, Object aThis, Locale locale) //throws Exception
{
System.out.println("Replacing Scene");
try
{
Parent root;
FXMLLoader loader=new FXMLLoader();
loader.setResources(ResourceBundle.getBundle("TextData.AllText", locale));
root = loader.load(this.getClass().getResource(fxml),null, new JavaFXBuilderFactory());
Scene scene=currentStage.getScene();
if(scene==null)
{
scene=new Scene(root);
currentStage.setScene(scene);
}
else
currentStage.getScene().setRoot(root);
currentStage.sizeToScene();
currentStage.show();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
LanguageUIFXML.fxml
<?import java.lang.*?>
<?import java.net.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" styleClass="mainFxmlClass" xmlns:fx="http://javafx.com/fxml" fx:controller="multilingualsupport.LanguageUIFXMLController">
<children>
<Label fx:id="lblDemo" layoutX="284.0" layoutY="72.0" prefHeight="26.0" prefWidth="144.0" text="%keyDemo" />
<TextField fx:id="txtDemo" layoutX="284.0" layoutY="124.0" prefWidth="200.0" text="%keyTextField" />
<TextArea fx:id="txtareaDemo" layoutX="284.0" layoutY="164.0" prefWidth="200.0" text="%keyTextArea" wrapText="true" />
<Button fx:id="btnDemo" layoutX="356.0" layoutY="347.0" mnemonicParsing="false" text="%keyButton" />
<ListView fx:id="listviewDemo" layoutX="35.0" layoutY="85.0" orientation="HORIZONTAL" prefHeight="218.0" prefWidth="221.0" />
</children>
<stylesheets>
<URL value="@/css/langageuifxml.css" />
</stylesheets>
</AnchorPane>
LanguageUIFXMLController.java
public class LanguageUIFXMLController implements Initializable {
private Label label;
@FXML
private Label lblDemo;
@FXML
private TextField txtDemo;
@FXML
private TextArea txtareaDemo;
@FXML
private Button btnDemo;
@FXML
private ListView<String> listviewDemo=new ListView<>();
private ResourceBundle bundle;
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
label.setText("Hello World!");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
bundle=rb;
lblDemo.setText(rb.getString("keyDemo"));
txtDemo.setText(rb.getString("keyTextField"));
txtareaDemo.setText(rb.getString("keyTextArea"));
btnDemo.setText(rb.getString("keyButon"));
}
}
錯誤信息:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.javafx.main.Main.launchApp(Main.java:642)
at com.javafx.main.Main.main(Main.java:805)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2737)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2721)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2707)
at multilingualsupport.MultiLingualSupport.replaceScene(MultiLingualSupport.java:58)
at multilingualsupport.MultiLingualSupport.start(MultiLingualSupport.java:35)
at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
.properties文件在包TextData中定義
你能驗證FXML文件和MultiLingualSupport類在同一個包中嗎?
您還調用非靜態實例化fxmlloader的靜態方法,在設置它之后再將ResourceBundle設置為null
loader.setResources(ResourceBundle.getBundle("TextData.AllText", locale));
你能試一下嗎
root = (AnchorPane) loader.load(this.getClass().getResource(fxml).openStream());
很抱歉這是2個拼寫錯誤和一個不正確的css路徑的結果。 必需的更改:在fxml文件中,應該是什么:
<URL value="@/css/langageuifxml.css" />
實際上是
<URL value="@css/langageuifxml.css" />
從bin文件夾以外的文件夾加載fxml文件時出錯此問題,而您的問題看起來與堆棧跟蹤相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.