3

我在终端中运行以下命令来运行存储在以下文件中的代码:

java -cp clojure.jar clojure.main thumbmaker.clj

thumbmaker.clj 的内容在哪里(这段代码已经在多个地方引用过):

(import javax.imageio.ImageIO)
(import java.awt.image.BufferedImage)
(use '[clojure.java.io :only [as-file input-stream output-stream] :as io])

(defn make-thumbnail-generic [input new-filename width]
  (let [img (javax.imageio.ImageIO/read input)
        imgtype (java.awt.image.BufferedImage/TYPE_INT_ARGB)
        width (min (.getWidth img) width)
        height (* (/ width (.getWidth img)) (.getHeight img))
        simg (java.awt.image.BufferedImage. width height imgtype)
        g (.createGraphics simg)]
    (.drawImage g img 0 0 width height nil)
    (.dispose g)

(defn make-thumbnail-from-file [filename new-filename width]
  (make-thumbnail-generic filename new-filename width))

(make-thumbnail-from-file "thumb.png" "test.png" 100)

我收到以下错误:

线程“主”java.lang.IllegalArgumentException 中的异常:未找到匹配方法:读取 (thumbmaker.clj:0)

我已经独立检查了 REPL 中的 import 和 use 语句,它们似乎被接受得很好。

我检查了 ImageIO 的 Java 参考,读取功能在那里。

我已经完成了 Java-Interop 的编写,这似乎是非常标准的方式,所以我无法弄清楚为什么读取不起作用。

4

1 回答 1

5

请参阅http://docs.oracle.com/javase/1.5.0/docs/api/javax/imageio/ImageIO.html

javax.imageio.ImageIO/read 需要一个 URL、文件、InputStream 或 ImageInputStream。不是字符串。

(javax.imageio.ImageIO/read (as-file input))可以解决问题。

于 2013-03-10T13:30:11.240 回答