java中引发意外异常的本地化代码

java中引发意外异常的本地化代码,java,localization,internationalization,resourcebundle,Java,Localization,Internationalization,Resourcebundle,我正在为学校做一个项目。应用程序提示的一部分指定我应该将本地化添加到登录页面,以便将文本翻译成其他两种语言。我没有任何本地化和国际化的经验,所以我在YouTube上查找了一个教程,你可以找到 本教程比我想做的稍微简单一些,但我认为我有效地推断了信息。我将要发布的只是一个测试,看看是否可以根据用户选择的单选按钮,让登录提示文本更改语言。这是我的登录控制器类: import java.net.URL; import java.util.Locale; import java.util.Resourc

我正在为学校做一个项目。应用程序提示的一部分指定我应该将本地化添加到登录页面,以便将文本翻译成其他两种语言。我没有任何本地化和国际化的经验,所以我在YouTube上查找了一个教程,你可以找到

本教程比我想做的稍微简单一些,但我认为我有效地推断了信息。我将要发布的只是一个测试,看看是否可以根据用户选择的单选按钮,让登录提示文本更改语言。这是我的登录控制器类:

import java.net.URL;
import java.util.Locale;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class LogInController implements Initializable {

@FXML
private Label logInPrompt;

@FXML
private TextField userNameField;

@FXML
private TextField passwordTextField;

@FXML
private RadioButton english;

@FXML
private RadioButton spanish;

@FXML
private RadioButton french;

@FXML
public void Login(ActionEvent event) throws Exception {
    if (userNameField.getText().equals("user") && passwordTextField.getText().equals("password")) {
        logInPrompt.setText("Log in successful!");

        Stage primaryStage = new Stage();

        Parent root = FXMLLoader.load(getClass().getResource("MainMenu.fxml"));

        Scene scene = new Scene(root);

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

    } else {
        logInPrompt.setText("Log in Failed");
    }
}

public String enLang = "en";

public String spLang = "sp";

public String frLang = "fr";

public String unitedStates = "US";

public String mexico = "MX";

public String france = "FR";

Locale us = new Locale(enLang, unitedStates);
ResourceBundle rbEn = ResourceBundle.getBundle("C195/MessageBundle_en_US", us);

Locale mx = new Locale(spLang, mexico);
ResourceBundle rbSp = ResourceBundle.getBundle("C195/MessageBundle_es_MX", mx);

Locale fr = new Locale(frLang, france);
ResourceBundle rbFr = ResourceBundle.getBundle("C195/MessageBundle_fr_FR", fr);

public String enLogIn = rbEn.getString("logInPromptEN");

public String spLogIn = rbSp.getString("logInPromptSP");

public String frLogIn = rbFr.getString("logInPromptFR");

public void langSelect(){
if (english.isSelected()){
  logInPrompt.setText(enLogIn);
}else if (spanish.isSelected()){
  logInPrompt.setText(spLogIn);
}else if (french.isSelected()){
  logInPrompt.setText(frLogIn);
}
}

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}

}
以下是我的一个属性文件的示例,其他两个属性文件相同,只是它们适用于其他两种语言:

logInPromptSP = Ingrese su nombre de usuario y contraseña:
如果我注释掉本地化代码,应用程序就会运行,但是如果我在没有注释的情况下运行它,我会得到一个一英里长的异常和错误列表,其中我所熟悉的很少

为了解决这个问题,我回去阅读了OCP学习指南中的本地化和国际化部分,并使用类似于我问题标题的搜索词搜索了StackOverflow

如果有人能在这个问题上给我任何帮助,我将不胜感激。还有一个简短的提示:这是我在StackOverflow上发布的第一个问题,我阅读了指导原则,但我在编程和使用StackOverflow方面都是个十足的笨蛋。因此,请告诉我,如果我的问题格式或我所问的问题在任何方面都不合适

以下是完整的堆栈跟踪:

ant -f C:\\Users\\Forbes\\Documents\\NetBeansProjects\\C195 jfxsa-run
init:
Deleting: C:\Users\Forbes\Documents\NetBeansProjects\C195\build\built-       jar.properties
deps-jar:
Updating property file:     C:\Users\Forbes\Documents\NetBeansProjects\C195\build\built-jar.properties
compile:
Deleting directory C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
Copying 1 file to C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
Detected JavaFX Ant API version 1.3
jfx-deployment:
jar:
Copying 13 files to      C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run302791547
jfx-project-run:
Executing      C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run302791547\C195.jar using     platform C:\Program Files\Java\jdk1.8.0_51\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav    a:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at     com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.j    ava:389)
at     com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at      sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav    a:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
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$152(LauncherImp    l.java:182)
at com.sun.javafx.application.LauncherImpl$$Lambda$51/1343441044.run(Unknown     Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
    file:/C:/Users/Forbes/Documents/NetBeansProjects/C195/dist/run302791547/C195.jar!/c195/LoginXML.fxml:10

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2605)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2583)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101)
at c195.C195.start(C195.java:13)
at     com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherIm    pl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda$54/1038706898.run(Unknown      Source)
at     com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:    326)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/355629945.run(Unknown      Source)
at     com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$49/722855603.run(Unknown      Source)
at java.security.AccessController.doPrivileged(Native Method)
at     com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:29    4)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/1915503092.run(Unknown     Source)
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$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1963387170.run(Unknown     Source)
... 1 more
Caused by: java.util.MissingResourceException: Can't find bundle for base      name C195/MessageBundle_en_US, locale en_US
at      java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
at c195.LogInController.<init>(LogInController.java:69)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at     sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorI    mpl.java:62)
at       sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA    ccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:923)
at      javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.ja    va:967)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216)
at     javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2711)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2531)
... 22 more
Exception running application c195.C195
Java Result: -1073741819
Deleting directory     C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run302791547
jfxsa-run:
BUILD SUCCESSFUL (total time: 5 seconds)
ant-fc:\\Users\\Forbes\\Documents\\NetBeansProjects\\C195 jfxsa运行
初始化:
删除:C:\Users\Forbes\Documents\NetBeansProjects\C195\build\build-jar.properties
deps jar:
更新属性文件:C:\Users\Forbes\Documents\NetBeansProjects\C195\build\build-jar.properties
汇编:
正在删除目录C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
正在将1个文件复制到C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
检测到JavaFX Ant API版本1.3
jfx部署:
罐子:
正在将13个文件复制到C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run302791547
jfx项目运行:
使用平台C:\Program Files\Java\jdk1.8.0\U 51\jre/bin/Java执行C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run302791547\C195.jar
应用程序启动方法中的异常
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)处
位于java.lang.reflect.Method.invoke(Method.java:497)
位于com.sun.javafx.application.LaunchImpl.launchApplicationWithArgs(LaunchImpl.j ava:389)
位于com.sun.javafx.application.LaunchImpl.launchApplication(LaunchImpl.java:328)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)处
位于java.lang.reflect.Method.invoke(Method.java:497)
位于sun.launcher.launchelper$FXHelper.main(launchelper.java:767)
原因:java.lang.RuntimeException:应用程序启动方法中的异常
位于com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:917)
在com.sun.javafx.application.launchempl.lambda$launchApplication$152(launchempl.java:182)
位于com.sun.javafx.application.launchempl$$Lambda$51/1343441044.run(未知源)
运行(Thread.java:745)
原因:javafx.fxml.LoadException:
文件:/C:/Users/Forbes/Documents/NetBeansProjects/C195/dist/run302791547/C195.jar/c195/LoginXML.fxml:10
位于javafx.fxml.fxmloader.constructLoadException(fxmloader.java:2605)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:2583)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:2445)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3218)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3179)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3152)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3128)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3108)
在javafx.fxml.fxmloader.load(fxmloader.java:3101)
在c195.c195.start(c195.java:13)
在com.sun.javafx.application.launchempl.lambda$launchApplication1$159(launcherm pl.java:863)
位于com.sun.javafx.application.LaunchImpl$$Lambda$54/1038706898.run(未知源)
位于com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
位于com.sun.javafx.application.PlatformImpl$$Lambda$47/355629945.run(未知来源)
位于com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
位于com.sun.javafx.application.PlatformImpl$$Lambda$49/722855603.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
位于com.sun.javafx.application.PlatformImpl$$Lambda$48/1915503092.run(未知来源)
位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95)
在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
在com.sun.glass.ui.win.WinApplication$$Lambda$37/1963387170.run(未知来源)
... 还有一个
原因:java.util.MissingResourceException:找不到基本名称C195/MessageBundle\u en\u US、locale en\u US的捆绑包
位于java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
位于java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
位于java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
在c195。登录控制器。(登录
ant -f C:\\Users\\Forbes\\Documents\\NetBeansProjects\\C195 jfxsa-run
init:
Deleting: C:\Users\Forbes\Documents\NetBeansProjects\C195\build\built-     jar.properties
deps-jar:
Updating property file:     C:\Users\Forbes\Documents\NetBeansProjects\C195\build\built-jar.properties
compile:
Deleting directory C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
Copying 1 file to C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\lib
Detected JavaFX Ant API version 1.3
jfx-deployment:
jar:
Copying 13 files to     C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run1318536498
jfx-project-run:
Executing     C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run1318536498\C195.jar      using platform C:\Program Files\Java\jdk1.8.0_51\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at     com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.j    ava:389)
at     com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav    a:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
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$152(LauncherImp    l.java:182)
at com.sun.javafx.application.LauncherImpl$$Lambda$51/1343441044.run(Unknown     Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
file:/C:/Users/Forbes/Documents/NetBeansProjects/C195/dist/run1318536498/C195.ja    r!/c195/LoginXML.fxml:10

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2605)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2583)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101)
at c195.C195.start(C195.java:13)
at     com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherIm    pl.java:863)
at com.sun.javafx.application.LauncherImpl$$Lambda$54/1361720784.run(Unknown     Source)
at      com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:    326)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/355629945.run(Unknown     Source)
at     com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
at com.sun.javafx.application.PlatformImpl$$Lambda$49/722855603.run(Unknown     Source)
at java.security.AccessController.doPrivileged(Native Method)
at     com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:29    4)
at com.sun.javafx.application.PlatformImpl$$Lambda$48/1915503092.run(Unknown     Source)
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$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1963387170.run(Unknown     Source)
... 1 more
Caused by: java.util.MissingResourceException: Can't find bundle for base     name MessageBundle_en_US, locale en_US
at     java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
at c195.LogInController.<init>(LogInController.java:70)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at     sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorI    mpl.java:62)
at     sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA    ccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:923)
at     javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.ja    va:967)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216)
at     javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2711)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2531)
... 22 more
Exception running application c195.C195
Java Result: -1073741819
Deleting directory     C:\Users\Forbes\Documents\NetBeansProjects\C195\dist\run1318536498
jfxsa-run:
BUILD SUCCESSFUL (total time: 5 seconds)