簡體   English   中英

java.lang.IllegalArgumentException:im == null! 錯誤

[英]java.lang.IllegalArgumentException: im == null! error

我剛剛學會了如何使用線程,我正在嘗試使用線程編碼一些圖像,但我會得到這個錯誤java.lang.IllegalArgumentException:im == null!
我嘗試沒有線程做同樣的事情,它只是慢慢地工作,不是因為圖像io,而是因為編碼圖像所需的時間。 WinDef.HDC是我從JNA庫獲得的變量類型。 當我沒有線程嘗試它時,我可以很容易地寫出1000張圖像(約60mb)。

//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);

從主ui線程以外的任何線程。 請參閱: http ://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/6398cda5-5393-4b16-b8dc-5bbf8902033f/(具體來說,我認為HDC不能在主ui線程之外使用) 。

因此,您需要首先創建屏幕截圖,然后將其傳遞給您的線程以執行IO(無論如何,這可能是緩慢的部分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM