读取文件时ImageIO在做什么?

时间:2019-03-09 22:41:31

标签: java javax.imageio

我对ImageIO.read(file)有点困惑。当我尝试将.png文件读入BufferedImage时,至少在macOS上,焦点转移到以我的主类命名的新应用程序。它出现在菜单栏中。即使从命令行运行Java,它也会这样做。

enter image description here

烦人的是,它将焦点移出了我的IDE,而我必须手动返回它。

我查看了ImageIO.read(file)的来源。我发现它正在调用ImageIO.createImageInputStream(file),而这正是触发此行为的原因。

我的问题是:ImageIO实际在做什么,为什么当我的主类仅在内存中加载信息时在菜单栏中显示它?最重要的是,我该如何避免呢?

在代码下面显示问题。使用任何.png进行测试。

package misc;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import java.io.File;
import java.io.IOException;

public class ReadImageTest {
    public static void main(String[] args) {
        try {
            File file = new File("out/production/resources/picture.png");
            long time = System.currentTimeMillis();
            ImageInputStream stream = ImageIO.createImageInputStream(file);
            long delay = System.currentTimeMillis() - time;
            System.out.println("stream: " + stream.length());
            System.out.println("time: " + delay/1000.0);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

Using Headless Mode in the Java SE Platform介绍了什么是无头模式以及如何正确使用它。

  

无头模式是一种系统配置,其中显示设备,   键盘或鼠标不足。听起来很意外,但实际上您可以   即使使用图形数据,也可以在此模式下执行不同的操作。

您可以通过在程序中添加以下选项来启用它:

-Djava.awt.headless=true

另请参阅: