简体   繁体   English

加载资源包会产生nullpointerexception

[英]loading resource bundle yields nullpointerexception

I've got the following file structure: 我有以下文件结构:

projectname/war/i18n/strings.properties
projectname/war/i18n/strings_de.properties
projectname/war/i18n/strings_fr.properties
projectname/war/i18n/strings_es.properties
projectname/war/i18n/strings_it.properties

so default is English. 因此默认为英语。 For accessing these file I do the following: 要访问这些文件,请执行以下操作:

public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
    {
        String lang = request.getParameter("lang");
        Locale locale = null;
        if( lang.equals("DE"))
            locale = new Locale("de");
        else if( lang.equals("FR"))
            locale = new Locale("fr");
        else if( lang.equals("IT"))
            locale = new Locale("it");
        else if( lang.equals("ES"))
            locale = new Locale("es");

        URL[] urls = {new File("i18n/").toURI().toURL()};
        ClassLoader loader = new URLClassLoader(urls);
        ResourceBundle strings = ResourceBundle.getBundle("strings", locale, loader ); 
        request.setAttribute("strings", strings );

However, when running this code I get 但是,运行此代码时,我得到

java.lang.NullPointerException
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1252)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:1028)
    at de.projectname.server.pages.MyServlet.doGet(MyServlet.java:41)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Why? 为什么?

EDIT: This does not work either: 编辑:这不起作用:

locale = null;
ResourceBundle strings = ResourceBundle.getBundle("strings", locale );

same error. 同样的错误。

The locale must not be null, else you will get that NPE when trying to load a resource bundle. 语言环境不得为null,否则在尝试加载资源包时会得到该NPE。

If your request parameter named lang does not fit to one of the locales in your if-then decisions, it will be null. 如果您的名为lang的请求参数不适合if-then决策中的语言环境之一,则该参数将为null。

Modify your code, so that it always has a value, eg: 修改您的代码,使其始终具有一个值,例如:

public void doGet( HttpServletRequest request, HttpServletResponse response ) throwsServletException, IOException
{
    String lang = request.getParameter("lang");

    // Default is english
    Locale locale = Locale.ENGLISH;

    if( lang.equals("DE"))
        locale = new Locale("de");
    else if( lang.equals("FR"))
        locale = new Locale("fr");
    else if( lang.equals("IT"))
        locale = new Locale("it");
    else if( lang.equals("ES"))
        locale = new Locale("es");
    ResourceBundle strings = ResourceBundle.getBundle("/i18n/strings", locale);
    // etc. etc.
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM