J'essaie d'utiliser des classes Java avec Clojure. Je l'ai essayé avec Scala avec succès, mais avec Clojure, j'obtiens une exception IllegalArgumentException.Clojure-problème en utilisant javax.sound.midi.Sequencer
est ici l'API: http://download.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Method.html
Le code ci-dessous:
(import '(javax.sound.midi MidiSystem Sequencer Sequence))
(def mySequencer (MidiSystem/getSequencer))
(def mySequence (Sequence. Sequence/PPQ 10))
((.setSequence mySequencer) mySequence)
jette une exception:
Exception in thread "main" java.lang.IllegalArgumentException: No matching field found: setSequence for class com.sun.media.sound.RealTimeSequencer (recordmidi.clj:0)
at clojure.lang.Compiler.eval(Compiler.java:5341)
at clojure.lang.Compiler.load(Compiler.java:5736)
at clojure.lang.Compiler.loadFile(Compiler.java:5699)
at clojure.main$load_script__6268.invoke(main.clj:213)
at clojure.main$script_opt__6296.invoke(main.clj:265)
at clojure.main$main__6314.doInvoke(main.clj:346)
at clojure.lang.RestFn.invoke(RestFn.java:409)
at clojure.lang.Var.invoke(Var.java:365)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: No matching field found: setSequence for class com.sun.media.sound.RealTimeSequencer
at clojure.lang.Reflector.getInstanceField(Reflector.java:245)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:267)
at user$eval__11.invoke(recordmidi.clj:4)
at clojure.lang.Compiler.eval(Compiler.java:5325)
... 10 more
goûtés Clojure 1.1.0 et 1.2.0. Fonctionne bien à Scala. J'ai également essayé d'examiner les méthodes de la classe Sequencer en utilisant Clojure, et oui, la méthode setSequence (Sequence) est là.
C'est le seul problème avec les appels Java que j'ai eu.
Merci, ce fut tout. J'ai simplement utilisé la manière de Clojure d'invoquer les méthodes Java dans le mauvais sens :-) Et merci pour le lien. – Grav