System.Class.GetResourceはプレイでは機能しません -- java フィールド と playframework フィールド と classloader フィールド 関連 問題

System.class.getResource doesn't work in Play












0
vote

問題

日本語

プレイプロジェクトを持っています。 私は実行しようとします:

<事前> <コード> System.class.getResource(/a/b/c/d)

とそれはnullで返されます。クラスローダーがNULLのためです。 実行した場合:

<事前> <コード> play.Application.class.getResource(/a/b/c/d)

うまくいきます。 誰もの修復方法を知っていますか?

編集: 私はより明確になるでしょう - 私は別のプロジェクトへの依存関係でプロジェクトを書きます、A.プロジェクト内のどこかに、パスがプロジェクト内にある行コードSystem.Class.GetResource(/ .....)があります。 A.プロジェクトに書き込むと、NullPointerExceptionを使用してGetResource()でプロジェクトAを使用するコードが失敗します。それから私は2行の私のプロジェクトで簡単な機能を書きました。 1つはsystem.class、もう1つはplay.application.classです。最初の行はnullを返し、2番目の1つはパスを返します。

英語

I have a play project. I try to execute:

System.class.getResource(/a/b/c/d) 

And it returns with null. It's because the class loader is null. If I execute:

play.Application.class.getResource(/a/b/c/d) 

It works. Does anyone know how to fix it?

EDIT: I'll be more clear - I write a project in play, with a dependency to another project A. Somewhere inside project A there is a line code System.class.getResource(/.....) where the path is in project A. When I write in my project a code that uses project A it fails in the getResource() with NullPointerException. Then I wrote a simple function in my project with two line. One is the System.class and the other is play.Application.class. the first line returns null, the second one returns the path.

</div
        
 
 

回答リスト

0
 
vote

コメントの数。

これはどのような種類のアプリケーションです(例えば、デスクトップ、サーバーアプリなど)。サーバーアプリは複数のクラスローダーを使用する傾向があり、これによりリソースがある場所にアクセスできないものに影響を与える可能性があります。いずれにせよ、システムクラスは他のアプリケーションでも個別のクラスローダーによってロードされる可能性があります。

アプリケーションのクラスパス内のリソースは?

リソースの場所を示すために使用しているものです。リソースへの相対パスまたは絶対パスになり、リソースはアプリケーションのクラスパスにあるはずです。絶対パスを使用している場合は、LOCATER文字列(e.com / mycompany / myproj / mypkg / myresource.txtの代わりに/com/mycompany/myproj/mypkg/myresource.txt)を含める必要があるかもしれません。

Play.getClass()のようなものを使用することもできます。getResource( "/ com / mycompany / myproj / mypkg / myresource.txt")

 

A couple of comments.

What type of application is this (e.g. desktop, server app, etc.). Server apps tend to use more than one class loader so this can have effects on where resources are and are not accessible. In any case, the System classes might be loaded by a separate class loader in other applications as well.

Is the resource in the class path of the application?

What are you using to indicate the location of the resource. It can be a relative or absolute path to the resource and the resource should be in the class path of the application. If you are using an absolute path I think you might need to include an initial / in the locator string (e.g. /com/mycompany/myproj/mypkg/MyResource.txt instead of com/mycompany/myproj/mypkg/MyResource.txt).

You can also use something like play.getClass().getResource("/com/mycompany/myproj/mypkg/MyResource.txt")

</div
 
 
 
 

関連する質問

0  ClassNotFoundExceptionを取得するときにクラスをライブラリに提供する方法  ( How to provide the class to a library when getting a classnotfoundexception ) 
次の問題があります。私はJava EEアプリケーション(私が開発しなかった)を持っています、そして私がそれを実行しようとしているとき私は特定の機能を実行しながら NoClassDefFoundError を取得しています。 <事前> <コード> [30/12...

6  クラスローダーはスレッドセーフにする必要がありますか?  ( Should classloader be thread safe ) 
私はカスタムクラスローダーを書いています、そしてそれをスレッドセーフにするべきかどうか疑問に思いますか? 簡単に表示できるように、すべてのネイティブJavaクラスローダがスレッドセーフではありません。 Javaクラスローダが同期されていない理由はありますか?...

1  プログラムでOSGiバンドルのインポートを変更します  ( Programmatically changing osgi bundle imports ) 
一般的なタスクに使用される私のEquinox OSGiアプリケーションに共通のバンドル(a)があります。しかし、状況によっては他の多くのバンドルからインポートパッケージをバンドルします。バンドルAとバンドルBがランタイムにあるとき、Aはパッケージ "com.b...

0  RCPアプリの表示を見つける  ( Finding display of an rcp app ) 
GUIアプリケーションを起動しているテストフレームワークを書いています。 SWTアプリケーションの場合にこのGUIをテストできるようにするには、それが表示されていることを知る必要があります。一般に、このディスプレイは別のクラスローダによってロードされているの...

178  Javaでクラスをアンロードしますか?  ( Unloading classes in java ) 
カスタムクラスローダーは、デスクトップアプリケーションがAppServerからのクラスの読み込みを動的に起動できるようにします。これを行う必要がある瓶の量はばかげているのでこれをやりました(私たちがそれらを出荷したいのなら)。 AppServerライブラリから...

5  クラスローダーを使用せずに動的にJavaクラスをロードする方法  ( How to dynamically load a java class without using a class loader ) 
私は最近、彼らが彼らが言及しているスライドのうちの1つで彼らが述べていないスライドの中で、彼らがクラスのローダーを使わないように説明するJrebelのオンラインプレゼンテーションを見ました(下のスクリーンショットを参照)。 実行時にクラスを動的にロードするため...

1  Javaで1種類のクラスローダーのみが1つだけであると思います[閉じる]  ( I think it is enough that only one kind of classloader in java ) 
ここで尋ねられていることを知るのは難しいです。この問題はあいまい、曖昧で、不完全で、過度に広く、または修辞的であり、現在の形で合理的に回答することはできません。再開できるようにこの質問を...

1  Spring Integration - WebSphereのClassNotFoundException  ( Spring integration classnotfoundexception in websphere ) 
Spring Integration Projectは、Eclipse / Tomcatでローカルに正しく機能しました。 WebSphereに展開するときは、Spring Integration Classesからクラスローダーの問題を取得します。 <事前...

5  同じJAR内の両方のクラスを持つjava.lang.NosuchMethoDError。  ( Java lang nosuchmethoderror with both classes in the same jar ) 
私のJavaスキルは少し錆びていますが、これは本当に奇妙なことです。クラスは呼び出し方法と同じJARに含まれています! それはそれがクラスパスの問題ではないことを示すように思われるでしょう - しかしそれは何ですか? ...

14  どのクラスがどのクラスのクラスローダがロードされたかを取得する方法がありますか?  ( Is there a way to get which classes a classloader has loaded ) 
古いフレームワークのための単体テストを実装しようとしています。データベース層をモックアウトしようとしています。残念ながら私たちの枠組みは少し古くて、ベストプラクティスを使っていないので、懸念の明確な分離はありません。データベースレイヤーをモックアウトしようとす...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有