1

プロパティ ファイルへのパスのバリエーションを試しましたが、正しく取得できないようです。

Here's the structure:

src/
├── properties.properties
└── teln
    ├── ConnectMUD.java
    ├── IOUtil.java
    └── PropertiesReader.java

そしてエラー:

run:
Exception in thread "main" java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Properties.java:434)
    at java.util.Properties.load0(Properties.java:353)
    at java.util.Properties.load(Properties.java:341)
    at teln.PropertiesReader.getProps(PropertiesReader.java:16)
    at teln.ConnectMUD.main(ConnectMUD.java:18)

そして問題のクラス:

package teln;


import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PropertiesReader {

    private static final Logger LOG = Logger.getLogger(PropertiesReader.class.getName());
    private static Properties props = new Properties();

    public static Properties getProps() {
        try {
            props.load(PropertiesReader.class.getResourceAsStream("/teln/teln.properties"));
        } catch (IOException ex) {
            Logger.getLogger(PropertiesReader.class.getName()).log(Level.SEVERE, null, ex);
        }
        LOG.fine(props.toString());
        return props;
    }
}

プロジェクトはそうTelnであり、パッケージはそうですteln(おそらく良い選択ではありません)。

参照: https://stackoverflow.com/a/8285636/262852

4

3 に答える 3

5

コードと設定が一致しません。teln.properties内部のファイルを要求しますが、外部のファイルteln を表示します。質問には一貫性を持たせてください。properties.propertiesteln

のjavadocClass#getResource(String)はそれをすべて言います。

はクラスパスのClassLoaderルートを調べます (Netbeans 構成でクラスパスを定義できます)。

次のようなNetbeansセットアップで

src/
├── properties.properties
└── teln
    ├── ConnectMUD.java
    ├── IOUtil.java
    └── PropertiesReader.java

クラスパスルートは次のようになると想定できます

properties.properties
teln/ConnectMud.class
teln/IOUtil.class
teln/PropertiesReader.class

properties.propertiesリソースを取得したい場合は、次のように取得する必要があります

 props.load(PropertiesReader.class.getResourceAsStream("/properties.properties"));

プレフィックス/は、パスをクラスパスのルートに対して相対的にすることを意味します。省略した場合、メソッドはクラスPropertiesReaderが含まれるパッケージのルートを参照します。

手がかり: クラスパスが不明な場合は、Netbeans を使用してプロジェクトの Jar をコンパイルし、そこを調べます。

于 2013-08-28T18:21:47.030 に答える
1

交換してみてはいかがですか

props.load(PropertiesReader.class.getResourceAsStream("/Teln/teln.properties"));

props.load(PropertiesReader.class.getResourceAsStream("/teln/teln.properties"));

于 2013-08-28T18:15:42.893 に答える