【问题标题】:Load properties in Eclipse Dynamic web project?在 Eclipse 动态 Web 项目中加载属性?
【发布时间】:2014-04-04 08:04:58
【问题描述】:

代码:

public void initialize() {
    Properties p = new Properties();
    try {

        p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties"));

        classForname = p.getProperty("classForname");
        url = p.getProperty("url");
        username = p.getProperty("user");
        password = p.getProperty("password");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(classForname);
    System.out.println(url);
    System.out.println(username);
    System.out.println(password);
}

Netbean 中的这段代码一直运行良好。

但是当我复制到 Eclipse 时,它​​在运行项目时无法从属性文件中加载信息。

运行一个文件就可以了

我将属性文件放在默认包 (Netbean) 和 /src/database.properties(Eclipse) 中

请帮帮我!!

这是一些日志:

 Apr 04, 2014 3:47:48 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Login] in context with path [/WebBasic] threw exception
java.lang.NullPointerException: Connection is null !
    at my.Dao.ConnectDatabase.getConnect(ConnectDatabase.java:73)
    at my.Dao.UserDAO.checkUser(UserDAO.java:40)
    at my.Servlet.Login.processRequest(Login.java:46)
    at my.Servlet.Login.doGet(Login.java:86)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 你有异常吗?还是代码根本没有执行?
  • 我定义了一个异常,因为创建连接时没有信息。我对 netbean 和 ecrise 之间的路径有些不同。
  • 您在读取属性时是否收到 FileNotFoundException 异常?
  • @TanmayPatil:没有FileNotFoundExceptiongetResourceAsStream(),它只是返回null。不过,p.load(null) 可能会抛出 NPE。

标签: java eclipse netbeans


【解决方案1】:

一些调试提示:

  1. 不要在一行中放这么多东西:

    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties");
    p.load(stream);
    
  2. 您忘记关闭流(资源泄漏)

  3. 您忘记检查流不是 null(= 告诉您 Java 找不到资源)

  4. 查看文件夹bin/。里面有文件database.properties 吗?注意:您不能在 Eclipse 中执行此操作,因为 IDE 隐藏了该文件夹的内容。使用您操作系统的工具。

  5. 在代码中创建断点并单步执行以查看会发生什么。

【讨论】:

  • 感谢您的建议!你能告诉我“bin/”在哪里吗?在tomcat或项目文件夹中?我在 C:\Users\Terminator\Documents\Eclipse Projects\WebBasic\build\classes 中有“database.properties”
  • 也许那是你的bin/ 文件夹。要找出答案,请打开“项目属性”对话框,转到“Java 构建路径”,打开“源”选项卡。我们寻找的值在“输出文件夹”下。请注意,可以有几个。如果database.properties 文件可以在其中一个中找到就足够了(最好是连接到您编辑文件的源文件夹的那个...)
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2011-12-06
  • 2012-07-24
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多