2010-10-07 5 views
1

Je ne parviens pas à importer des classes finales à partir d'un package Java. L'importation de classes normales fonctionne correctement. Par exemple:Importation de classes finales

 
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> 

La dernière importation génère une erreur NoClassDefFoundError. Voici une sortie plus complète:

 
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-- 

Une idée de ce qui se passe?

Merci!

+0

Qu'est-ce qui vous fait penser que cela a quelque chose à voir avec le fait que ce soit une classe finale? –

+0

Eh bien, j'ai expérimenté l'importation de diverses classes et les seules qui ont généré cette erreur étaient les classes finales. Redémarrer SLIME n'a servi à rien, mais j'ai résolu le problème en redémarrant Emacs. Allez comprendre. – konr

Répondre

3

Essayer d'importer org.gnome.gdk.ModifierType vous donne en fait une autre erreur d'abord, puis vous donne l'erreur que vous voyez.

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 

Per the docs, org.gnome.gtk.Gtk/init ressemble:

public static void init(String[] args) 

redémarrer la machine virtuelle Java et donc essayez ceci:

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

semble fonctionner.

1

Il me manque le savoir-faire Java pour donner une bonne réponse, mais peut-être que l'import-static est ce que vous cherchez?

(import-statique classe & champs-et-méthodes)

Importe les champs statiques nommés et/ou méthodes statiques de la classe comme symboles (privés) dans l'espace de noms en cours.

http://clojuredocs.org/v/487

+0

Pas vraiment, je ne peux pas évaluer les classes finales dans une fonction, y compris 'show' et' import-static'. :( – konr

+0

Désolé, comme je l'ai dit, je ne suis pas trop familier avec le côté Java des choses.Il semble y avoir des discussions en cours dans cette transcription IRC http://clojure-log.n01se.net/date/2010 -07-03.html, recherchez NoClassDefFoundError et commencez à lire un peu plus haut que cela.Si cela n'aide pas, IRC est probablement un bon endroit où aller demander de l'aide. –

Questions connexes