0

私は自分のアプリケーションデータとコードをNBの異なるソースパッケージに保持するのが好きです(Javaパッケージと間違えないでください)。

だから今回はやりました。残念ながら、あるパッケージから別のパッケージにFileオブジェクトを介してファイルを取得することはできません。これが私のパッケージ構造です

Source Packages
    |-[J]basicstuff
    |-[J]net.abc.utils
  assets
    |-[F]Images
    |-[F]Layouts

伝説:

  • 表示なし-NBのプロジェクトプロパティに追加されたソースパッケージ
  • [J]標準のJavaパッケージ
  • [F]-ファイルマネージャーで作成されたデータのフォルダー

重要なのは、独自のGUIシステムを使用しているため、カスタムレイアウトローダーがあります。レイアウトは、アセット/レイアウトに配置されたJSONテキストファイルです。残念ながら、私のレイアウトマネージャー(net.abc.utilsの別のクラス)はそれらをロードできません。私が何をしても、それらをロードすることはできません。

私はもう試した

File layout = new File("assets/Layouts/layout.txt");

それから

File layout = new File("../../../assets/Layouts/layout.txt");

それから私はそれがsrcdirを含む上記の4つのディレクトリであることを思い出しました。

File layout = new File("../../../../assets/Layouts/layout.txt");

しかし、それも機能しませんでした。

試しても

File layout = new File("../../../../Layouts/layout.txt");

File layout = new File("../../../Layouts/layout.txt");

しかし、もちろんそれらも機能しませんでした。手伝って頂けますか?

4

1 に答える 1

1

アプリケーションが存在する環境スタンドアロンApplicationServer )に応じて、適切な を使用する必要がありますClassLoader

次のようなものを試してください。

private static InputStream getResourceAsStream(String resource) throws FileNotFoundException {
    String stripped = resource.startsWith("/") ? resource.substring(1) : resource;
    InputStream stream = null;
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if (classLoader != null) {
        stream = classLoader.getResourceAsStream(stripped);
    }
    if (stream == null) {
        stream = MyClass.class.getResourceAsStream(resource);
    }
    if (stream == null) {
        stream = MyClass.class.getClassLoader().getResourceAsStream(stripped);
    }
    if (stream == null) {
        throw new FileNotFoundException("Resource not found: " + resource);
    }
    return stream;
}

使用する場合:

MyClass.getResourceAsStream("Layouts/layout.txt");
于 2012-05-12T17:25:00.660 に答える