java - ImageIO 在读取文件时在做什么?
问题描述
我有点困惑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();
}
}
}
解决方案
在 Java SE 平台中使用无头模式描述了什么是无头模式以及如何正确使用它。
无头模式是缺少显示设备、键盘或鼠标的系统配置。听起来很意外,但实际上您可以在此模式下执行不同的操作,即使是图形数据。
您可以通过在程序中添加以下选项来启用它:
-Djava.awt.headless=true
也可以看看:
推荐阅读
- python - 在特定时间段内过期的 Django 应用程序
- java - 在数组中,检查字符串是否相同,如果相同,则向上计数
- c# - 保存和加载 DataGridView 数据的最佳方式
- python - Python中的条件格式化字符串
- python - 如何使用 tkinter python 的入口值
- javascript - Crockford 书中的 Javascript 中的记忆
- javascript - JS .style.display = "inline" 将在 CSS 中显示为 "inline-block"
- oracle - Oracle 表值函数在数据工厂中返回错误的小数
- xslt - XSLT:检查字符串是否包含来自另一组节点的任何值
- .net - 在调试具有多个动态生成的程序集的程序时冻结 C#/.NET