2012-01-05 200 views
1

我剛剛學會了如何使用線程昨天,我想使用線程編碼一些圖像,但我會得到這個錯誤 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 
+1

它似乎image = JNAScreenShot.encodeRawWindow(rawImage,bounds);在這一行圖像是空的。你有沒有嘗試打印System.out? – kosa 2012-01-05 05:52:03

+0

現在試了一下,它打印出null看起來,由於某種原因它沒有將對象傳遞到線程 - 旁邊注意到當我檢查WinDef.HDC的API時,它擴展了句柄,不知道如果這有什麼關係它? – user4090 2012-01-05 05:56:06

+0

我不知道這種方法是什麼,只要它被修復,一切都應該正常工作。 – kosa 2012-01-05 05:57:34

回答

3

這幾乎可以肯定,你不能打電話的情況:

image = JNAScreenShot.encodeRawWindow(rawImage, bounds); 

從除主UI線程以外的任何線程。請參閱: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/6398cda5-5393-4b16-b8dc-5bbf8902033f/(具體來說,我不認爲HDC在主UI線程之外是可用的)。因此,您需要先創建屏幕截圖,然後將其傳遞到您的線程以完成IO(反正這可能是緩慢的部分)。

+0

是這只是什麼iv一直在尋找整天,我所有的錯誤似乎都與我在一個計時器中拍攝圖像(HDC)的事實有關線程,並試圖在另一個處理他們 – user4090 2012-01-05 09:45:42

+0

在旁邊注意你知道HDC的事情嗎?我在通過jna libary後發現了它。我真正好奇的是它存儲信息的地方以及如何訪問它 – user4090 2012-01-05 23:55:08

+0

似乎無法通過谷歌找到任何有關HDC類的有意義的東西 – user4090 2012-01-06 00:02:45

相關問題