Проблема Clojure с использованием javax.sound.midi. Sequencer

Я пытаюсь использовать некоторые Java-классы с Clojure. Я успешно пробовал это на Scala, но с Clojure получаю исключение IllegalArgumentException.

Вот API: http://download.oracle.com/javase/1.4.2/docs/api/java /lang/reflect/Method.html

Приведенный ниже код:

(import '(javax.sound.midi MidiSystem Sequencer Sequence))
(def mySequencer (MidiSystem/getSequencer))
(def mySequence (Sequence. Sequence/PPQ 10))
((.setSequence mySequencer) mySequence)

вызывает исключение:

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

Испытано в Clojure 1.1.0 и 1.2.0. Прекрасно работает в Scala. m пытается использовать некоторые Java-классы с Clojure. Я успешно пробовал это на Scala, но с Clojure получаю исключение IllegalArgumentException.

Вот API: http://download.oracle.com/javase/1.4.2/docs/api/java /lang/reflect/Method.html

Приведенный ниже код:

(import '(javax.sound.midi MidiSystem Sequencer Sequence))
(def mySequencer (MidiSystem/getSequencer))
(def mySequence (Sequence. Sequence/PPQ 10))
((.setSequence mySequencer) mySequence)

вызывает исключение:

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

Испытано в Clojure 1.1.0 и 1.2.0. Прекрасно работает в Scala. m пытается использовать некоторые Java-классы с Clojure. Я успешно пробовал это на Scala, но с Clojure получаю исключение IllegalArgumentException.

Вот API: http://download.oracle.com/javase/1.4.2/docs/api/java /lang/reflect/Method.html

Приведенный ниже код:

(import '(javax.sound.midi MidiSystem Sequencer Sequence))
(def mySequencer (MidiSystem/getSequencer))
(def mySequence (Sequence. Sequence/PPQ 10))
((.setSequence mySequencer) mySequence)

вызывает исключение:

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

Испытано в Clojure 1.1.0 и 1.2.0. Прекрасно работает в Scala. Я также попытался изучить методы класса Sequencer с помощью Clojure, и да, метод setSequence (Sequence) находится там .

Это единственная проблема с Java-вызовами, которые у меня были.

1
задан Grav 21 September 2010 в 12:42
поделиться