我剛剛學會了如何使用線程昨天,我想使用線程編碼一些圖像,但我會得到這個錯誤 java.lang.IllegalArgumentException:im == null!
我試着做這個沒有線程的完全相同的東西,它的工作很好,只是緩慢的,不是因爲圖像io,而是因爲編碼圖像所花費的時間。 WinDef.HDC是我從JNA庫中獲得的變量類型。當我嘗試沒有線程的時候,我可以輕鬆地寫出1000張圖片(約60mb)。java.lang.IllegalArgumentException:im == null!錯誤
//The thread class
public class imageEncoderThread extends Thread {
HDC originalImage;
BufferedImage image;
public imageProcessThread (HDC rI) {
originalImage = rI'
}
@Override
public void run() {
//returns a buffered image
image = process(rawImage);
try {
ImageIO.write(image, "jpg", new File (filePath));
} catch (IOException e) {
}
}
}
//full stack trace
Exception in thread "Thread-5" java.lang.IllegalArgumentException: im == null!
at javax.imageio.ImageIO.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at com.capture.SingleImageEncoderThread.run(Thread.java:33)
Exception in thread "Thread-7" java.lang.IllegalArgumentException: im == null!
at javax.imageio.ImageIO.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at com.capture.SingleImageEncoderThread.run(Thread.java:33)
Exception in thread "Thread-6" java.lang.IllegalArgumentException: im == null!
at javax.imageio.ImageIO.write(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
//and so on with the same exception
它似乎image = JNAScreenShot.encodeRawWindow(rawImage,bounds);在這一行圖像是空的。你有沒有嘗試打印System.out? – kosa 2012-01-05 05:52:03
現在試了一下,它打印出null看起來,由於某種原因它沒有將對象傳遞到線程 - 旁邊注意到當我檢查WinDef.HDC的API時,它擴展了句柄,不知道如果這有什麼關係它? – user4090 2012-01-05 05:56:06
我不知道這種方法是什麼,只要它被修復,一切都應該正常工作。 – kosa 2012-01-05 05:57:34