简体   繁体   English

java.lang.IllegalArgumentException:im == null! 错误

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

I just learned how to use threads yesterday and I'm trying to encode some images using threads but I'll get this error java.lang.IllegalArgumentException: im == null! 我刚刚学会了如何使用线程,我正在尝试使用线程编码一些图像,但我会得到这个错误java.lang.IllegalArgumentException:im == null!
I tried doing this exact same thing without threads and it worked fine just kind of slowly, not because of the image io but because of the time it takes to encode images. 我尝试没有线程做同样的事情,它只是慢慢地工作,不是因为图像io,而是因为编码图像所需的时间。 the WinDef.HDC is a variable type I got from the JNA library. WinDef.HDC是我从JNA库获得的变量类型。 When I did try it without threads I could easily write out 1000 images (about 60mb). 当我没有线程尝试它时,我可以很容易地写出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 

It's almost certainly the case that you cannot call: 几乎可以肯定你不能打电话:

image = JNAScreenShot.encodeRawWindow(rawImage, bounds);

from any thread other than the main ui thread. 从主ui线程以外的任何线程。 See: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/6398cda5-5393-4b16-b8dc-5bbf8902033f/ (specifically, I do not think HDCs are usable outside the main ui thread). 请参阅: http ://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/6398cda5-5393-4b16-b8dc-5bbf8902033f/(具体来说,我认为HDC不能在主ui线程之外使用) 。

So, you'll need to create the screenshot first, then pass it to your thread to do the IO (that's probably the slow part, anyway). 因此,您需要首先创建屏幕截图,然后将其传递给您的线程以执行IO(无论如何,这可能是缓慢的部分)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在JAVA中上载时发生错误“ message [java.lang.IllegalArgumentException:im == null!]” - Error While Uploading in JAVA “message[java.lang.IllegalArgumentException: im == null!]” 错误:java.lang.IllegalArgumentException - Error: java.lang.IllegalArgumentException Junit 与 MockMVC - 错误 - java.lang.IllegalArgumentException:实体不能为空 - Junit with MockMVC - Error - java.lang.IllegalArgumentException: Entity must not be null 加载图像时出错 - java.lang.IllegalArgumentException: input == null - Error in loading image - java.lang.IllegalArgumentException: input == null 线程“AWT-EventQueue-0”中的异常java.lang.IllegalArgumentException:im == null - Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: im == null 改造Java.lang.IllegalArgumentException host == null - Retrofit Java.lang.IllegalArgumentException host == null java.lang.illegalArgumentException:图片==空吗? - java.lang.illegalArgumentException: Image==null? java.lang.IllegalArgumentException:image == null - java.lang.IllegalArgumentException: image == null java.lang.IllegalArgumentException:nativePtr为null - java.lang.IllegalArgumentException: nativePtr is null java.lang.IllegalArgumentException:方法不能为null - java.lang.IllegalArgumentException: Method must not be null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM