导入最终类

时间:2010-10-07 07:59:51

标签: clojure noclassdeffounderror

我无法从java包导入最终类。导入普通类工作正常。例如:

gtk-examples.snooping> (import 'org.gnome.gdk.MouseButton)
org.gnome.gdk.MouseButton
gtk-examples.snooping> (import 'org.gnome.gdk.ModifierType)
; Evaluation aborted.
gtk-examples.snooping> 

最后一次导入会产生NoClassDefFoundError。这是一个更完整的输出:

Could not initialize class org.gnome.gdk.ModifierType
  [Thrown class java.lang.NoClassDefFoundError]

Restarts:
 0: [QUIT] Quit to the SLIME top level

Backtrace:
  0: java.lang.Class.forName0(Native Method)
  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)
 --more--

知道发生了什么事吗?

谢谢!

2 个答案:

答案 0 :(得分: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

the docsorg.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

似乎工作。

答案 1 :(得分:1)

我缺乏Java专有技术来给出正确的答案,但是你可能正在寻找import-static?

  

(import-static class& fields-and-methods)

     

导入指定的静态字段和/或   类的静态方法为   当前的(私人)符号   命名空间。

http://clojuredocs.org/v/487