我在终端中运行以下命令来运行存储在以下文件中的代码:
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)
我收到以下错误:
线程“main”中的异常java.lang.IllegalArgumentException:否 找到匹配方法:read(thumbmaker.clj:0)
我已经独立检查了REPL中的import和use语句,它们似乎被接受了很好。
我检查了ImageIO的Java参考,并且读取函数在那里。
我已经完成了Java-Interop写法,这似乎是非常标准的方式,所以我无法弄清楚为什么读取不起作用。
答案 0 :(得分:5)
请参阅http://docs.oracle.com/javase/1.5.0/docs/api/javax/imageio/ImageIO.html
javax.imageio.ImageIO / read需要URL,File,InputStream或ImageInputStream。不是字符串。
执行(javax.imageio.ImageIO/read (as-file input))
解决问题。