3

を使用してEntityListenersをアプリケーションに追加すると@EntityListeners(value = {MyEventListener.class})、次のクラッシュが発生しました。リフレクションの問題に見えます。アプリケーションには、同じエンティティに対して定義されたカスタムアノテーションがあります。このクラッシュは、EntityListenersを追加した後にのみ発生することに注意してください。カスタムアノテーションがコメント化されている場合でも、アプリケーションはクラッシュします。奇妙なことに、Netbeansデバッガを介して実行すると、同じコードが正常に機能します。呼び出しはgetAnnotation()、エンティティに定義されたすべての注釈を読み取ります。デバッガーの外部でアプリケーションを起動すると、クラッシュします。クラスローダーがMyEventListener.classを見つけられない理由を見つけることができませんでした。

at sun.reflect.annotation.AnnotationParser.parseClassArray(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseArray(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseAnnotation(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(Unknown Source)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(Unknown Source)
at java.lang.Class.initAnnotationsIfNecessary(Unknown Source)
at java.lang.Class.getAnnotation(Unknown Source)
at com.feedoffice.FOEDataCache.initializeInternalListeners(FOEDataCache.java:34)
at com.DataCache.<init>(DataCache.java:20)
at com.feedoffice.FOEDataCache.<init>(FOEDataCache.java:16)
at com.feedoffice.ClientDataCache.<init>(ClientDataCache.java:163)
at com.ClientDataCache.<clinit>(ClientDataCache.java:171)
at com.feedoffice.forms.FOENumericTextFieldFactory.<init>(FOENumericTextFieldFactory.java:14)
at com.feedoffice.forms.FOENumericTextFieldFactory.getInstance(FOENumericTextFieldFactory.java:24)
at com.feedoffice.FOEApplet.displayMenu(FOEApplet.java:282)
at com.feedoffice.FOEApplet.loginWindowClosed(FOEApplet.java:215)
at com.feedoffice.forms.AppLogin.submitButtonClicked(AppLogin.java:49)
at com.feedoffice.forms.AppLogin.performSubmitAction(AppLogin.java:106)

誰かがこれを見て、それを修正する方法を知っていますか?

4

1 に答える 1

12

問題はおそらく次のとおりです。値がクラスパスにないクラスを使用するアノテーションがあります。

ここに短い例があります:

@MyAnnotation (value = MyClass.class)
public class TestClass

クラスパスで「Myclass」が使用可能であることを確認する必要があります。(たとえば、アプリにパッケージ化することによって)

于 2012-10-11T08:59:28.350 に答える