1

Java パッケージから最終クラスをインポートできません。通常のクラスのインポートは正常に機能します。例えば:

gtk-examples.snooping> (インポート 'org.gnome.gdk.MouseButton)
org.gnome.gdk.MouseButton
gtk-examples.snooping> (インポート 'org.gnome.gdk.ModifierType)
; 評価は中止されました。
gtk-examples.snooping>

最後のインポートで NoClassDefFoundError が発生します。より完全な出力を次に示します。

クラス org.gnome.gdk.ModifierType を初期化できませんでした
  [スローされたクラス java.lang.NoClassDefFoundError]

再起動:
 0: [QUIT] SLIMEトップレベルまで終了

バックトレース:
  0: java.lang.Class.forName0(ネイティブメソッド)
  1: java.lang.Class.forName(Class.java:186)
  2: gtk_examples.snooping$eval2063.invoke(NO_SOURCE_FILE:1)
  3: clojure.lang.Compiler.eval(Compiler.java:5424)
  4: clojure.lang.Compiler.eval(Compiler.java:5415)
  5: clojure.lang.Compiler.eval(Compiler.java:5391)
  6: clojure.core$eval.invoke(core.clj:2382)
 - もっと - 

何が起こっているのか考えていますか?

ありがとう!

4

2 に答える 2

3

実際にインポートしようとするとorg.gnome.gdk.ModifierType、最初に別のエラーが発生し、次に表示されているエラーが発生します。

user> (import 'org.gnome.gdk.ModifierType)
; Evaluation aborted.
org.freedesktop.bindings.FatalError: 
You *must* call Gtk.init() before using anything else in java-gnome!

user> (import 'org.gnome.gdk.ModifierType)
; Evaluation aborted.
java.lang.NoClassDefFoundError: Could not initialize class org.gnome.gdk.ModifierType

docsによるorg.gnome.gtk.Gtk/init、次のようになります。

public static void init(String[] args)

JVMを再起動して、これを試してください:

user> (org.gnome.gtk.Gtk/init (make-array String 0))
nil
user> (import 'org.gnome.gdk.ModifierType)
org.gnome.gdk.ModifierType

うまくいくようです。

于 2010-10-07T19:00:29.417 に答える
1

私には適切な答えを出すための Java のノウハウが欠けていますが、あなたが探しているのは import-static ではないでしょうか?

(インポート静的クラス & フィールドとメソッド)

クラスの名前付き静的フィールドや静的メソッドを (プライベート) シンボルとして現在の名前空間にインポートします。

http://clojuredocs.org/v/487

于 2010-10-07T09:46:52.713 に答える