1

以下のコードのように、Clojure で JMathPlot を使用しています。

(ns plot.core
 (:gen-class)
 (:import [org.math.plot Plot2DPanel])
 (:import [javax.swing JFrame]))

(let [plot (new Plot2DPanel)
      frame (JFrame. "plot")] 
  (doto plot
    (.addLegend "SOUTH")
    (.addLinePlot [1 2 3]  [22 33 44]))
  (doto frame 
    (.setContentPane plot)
    (.setSize 300 300)
    (.setVisible true)))

しかし、「No Matching method」のエラーがあります:

java.lang.IllegalArgumentException: No matching method found: addLinePlot for class org.math.plot.Plot2DPanel
            Reflector.java:80 clojure.lang.Reflector.invokeMatchingMethod
            Reflector.java:28 clojure.lang.Reflector.invokeInstanceMethod
                    jmp.clj:8 plot.core/eval56
           Compiler.java:6511 clojure.lang.Compiler.eval
           Compiler.java:6952 clojure.lang.Compiler.load
             NO_SOURCE_FILE:1 user/eval48
           Compiler.java:6511 clojure.lang.Compiler.eval
           Compiler.java:6477 clojure.lang.Compiler.eval
                core.clj:2797 clojure.core/eval
                 main.clj:245 clojure.main/repl[fn]
                 main.clj:266 clojure.main/repl[fn]
                 main.clj:266 clojure.main/repl
             RestFn.java:1096 clojure.lang.RestFn.invoke
    interruptible_eval.clj:56 clojure.tools.nrepl.middleware.interruptible-eval/evaluate[fn]
                 AFn.java:159 clojure.lang.AFn.applyToHelper
                 AFn.java:151 clojure.lang.AFn.applyTo
                 core.clj:601 clojure.core/apply
                core.clj:1771 clojure.core/with-bindings*
              RestFn.java:425 clojure.lang.RestFn.invoke
    interruptible_eval.clj:41 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
   interruptible_eval.clj:171 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval[fn]
                core.clj:2278 clojure.core/comp[fn]
   interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn]
                  AFn.java:24 clojure.lang.AFn.run
             (Unknown Source) java.util.concurrent.ThreadPoolExecutor.runWorker
             (Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run
             (Unknown Source) java.lang.Thread.run

コードは JMathPlot Web ページの例に基づいているため、メソッドが存在しない理由がわかりません。このメソッドを使用せずにコードを実行していて、正しく動作しているため、問題は特に addLinePlot にあります。

4

2 に答える 2

3

addLinePlotメソッドの引数として、ベクトルではなく配列が必要です。次のように、単純な配列を使用する必要があります。

(.addLinePlot plot (double-array [1 2 3]) (double-array [22 33 44]))

clojure の配列の詳細については、こちらを参照してください。

于 2013-03-16T06:51:25.833 に答える
0

問題が見つかりました.addLinePlotは、サイトの例のように3つ未満の引数を受け入れません

plot.addLinePlot("私のプロット", x, y);

「私のプロット」が削除された場合、メソッドは上記のようにエラーをスローします!

于 2013-03-31T19:14:27.330 に答える