【问题标题】:java.lang.NullPointerException in Java ResourceBundle [duplicate]Java ResourceBundle 中的 java.lang.NullPointerException [重复]
【发布时间】:2017-05-21 01:09:44
【问题描述】:

我正在尝试检测和设置我们网站的默认浏览器语言,如果程序无法检测到,则将“en”、“US”设置为默认值。

这是我的代码:

private static final Locale locale(){
        HttpServletRequest req  = null;
        Locale locale           = req.getLocale();          
            if(locale==null || locale.equals("") || "".equals(locale)){
                locale = new Locale("en", "US");
            }else{
                locale = new Locale(language, country);             
            }
    return locale;          
    }   

    public static String getProperty(final String key) {    
        ResourceBundle rb = ResourceBundle.getBundle("com.i18n.resource.bundles.LabelBundles.Labels",locale()); 
        String str = null;          
        try{
            if (rb != null) {
                str = rb.getString(key);        
            }       
        }catch(Exception e){
            errorMsg("Resources.ResourceBundle.java:getProperty()", e);
        }
    return str;
    }

编辑 抱歉我忘记复制粘贴 stackTrace

java.lang.NullPointerException
        at com.i18n.resource.Resources.locale(Resources.java:52)
        at com.i18n.resource.Resources.getProperty(Resources.java:60)
        at com.site.pages.Home.doGet(Home.java:59)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at filters.charsetFilter.filter.CharsetFilter.doFilter(CharsetFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:744)

【问题讨论】:

  • 在询问异常相关问题时总是显示堆栈跟踪!!

标签: java servlets utf-8 locale resourcebundle


【解决方案1】:

这将引发 NullPointerException:

private static final Locale locale(){
    HttpServletRequest req  = null;
    Locale locale           = req.getLocale();   

请求为空。

【讨论】:

  • 你能告诉我为什么这段代码会抛出 NPE 吗?以及修复它的任何线索?
  • 因为变量reqnull。然后当指令req.getLocale() 被求值时,它实际上会在一个null 的变量上调用getLocale()。您需要先初始化req 变量。
  • 我初始化并抛出此错误Resources.java:52: error: non-static variable request cannot be referenced froma static context Locale locale = request.getLocale(); ^ 1 error
  • 好像你在静态方法中使用了非静态字段,这是不允许的。请问你是如何初始化的?
  • thisthat 应该可以帮助您进一步
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
相关资源
最近更新 更多