我对ImageIO.read(file)
有点困惑。当我尝试将.png文件读入BufferedImage时,至少在macOS上,焦点移动到以我的主类命名的新应用程序。它出现在菜单栏中。即使我从命令行运行java,它也会这样做。
令人讨厌的是,它将焦点移出我的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();
}
}
}
Using Headless Mode in the Java SE Platform描述了什么是无头模式以及如何正确使用它。
无头模式是缺少显示设备,键盘或鼠标的系统配置。听起来很意外,但实际上你可以在这种模式下执行不同的操作,即使是图形数据。
您可以通过在程序中添加以下选项来启用它:
-Djava.awt.headless=true
也可以看看: