1

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

gtk-examples.snooping> (导入 'org.gnome.gdk.MouseButton)
org.gnome.gdk.MouseButton
gtk-examples.snooping> (import '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

根据文档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 回答