读取文件时 ImageIO 在做什么?
What is ImageIO doing when reading a file?
我对ImageIO.read(file)
有点困惑。当我尝试将 .png 文件读入 BufferedImage 时,至少在 macOS 上,焦点会移动到以我的 main class 命名的新应用程序。它出现在菜单栏中。即使我从命令行 运行 java 也是如此。
烦人的是它把焦点从我的 IDE 移开,我不得不手动 return 它。
我查看了 ImageIO.read(file)
的来源。我发现它正在调用 ImageIO.createImageInputStream(file)
,这就是触发此行为的原因。
我的问题是:ImageIO 实际上在做什么,为什么我的主要 class 只是在内存中加载信息时显示在菜单栏中。最重要的是,我该如何避免它?
下面的代码显示了问题。使用任何 .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 描述什么是无头模式以及如何正确使用它。
Headless mode is a system configuration in which the display device,
keyboard, or mouse is lacking. Sounds unexpected, but actually you can
perform different operations in this mode, even with graphic data.
您可以通过在您的程序中添加以下选项来启用它:
-Djava.awt.headless=true
另请参阅:
- What is the benefit of setting java.awt.headless=true?
- How can I prevent command line java processes from stealing focus in OSX?
- Setting java.awt.headless=true programmatically
我对ImageIO.read(file)
有点困惑。当我尝试将 .png 文件读入 BufferedImage 时,至少在 macOS 上,焦点会移动到以我的 main class 命名的新应用程序。它出现在菜单栏中。即使我从命令行 运行 java 也是如此。
烦人的是它把焦点从我的 IDE 移开,我不得不手动 return 它。
我查看了 ImageIO.read(file)
的来源。我发现它正在调用 ImageIO.createImageInputStream(file)
,这就是触发此行为的原因。
我的问题是:ImageIO 实际上在做什么,为什么我的主要 class 只是在内存中加载信息时显示在菜单栏中。最重要的是,我该如何避免它?
下面的代码显示了问题。使用任何 .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 描述什么是无头模式以及如何正确使用它。
Headless mode is a system configuration in which the display device, keyboard, or mouse is lacking. Sounds unexpected, but actually you can perform different operations in this mode, even with graphic data.
您可以通过在您的程序中添加以下选项来启用它:
-Djava.awt.headless=true
另请参阅:
- What is the benefit of setting java.awt.headless=true?
- How can I prevent command line java processes from stealing focus in OSX?
- Setting java.awt.headless=true programmatically