java - 使用 BufferedImage 将图像加载到 Java - Oracle 教程
问题描述
我是 Java 的初学者,我想用这个脚本加载一个图像:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;
/**
* This class demonstrates how to load an Image from an external file
*/
public class LoadImageApp extends Component {
BufferedImage img;
public void paint(Graphics g) {
g.drawImage(img, 0, 0, null);
}
public LoadImageApp() {
try {
img = ImageIO.read(getClass().getResource("/resources/java.png"));//cannot found image
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100,100);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
public static void main(String[] args) {
JFrame f = new JFrame("Load Image Sample");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new LoadImageApp());
f.pack();
f.setVisible(true);
}
}
然后我把一张图片放在文件夹资源“resources”上,把图片所在位置的名字改成“/resources/java.png”,编译的时候出现一个没有图片的空窗口。
您可以在这里看到错误:https ://ibb.co/ysjNyQw
解决方案
例如,您要做的第一件事是对“嵌入式资源”进行一些研究
我不用Eclipse,我用Netbeans,但是流程应该是一样的
如您所见,我已将图像放在resources
项目“源”中的包中。这将确保它在运行时通过类路径搜索机制可用(并在我导出时嵌入到生成的 Jar 文件中)。
然后我用 aJLabel
来显示它...
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
BufferedImage image = ImageIO.read(getClass().getResource("/resources/java.png"));
JLabel label = new JLabel(new ImageIcon(image));
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
}
现在,如果您想继续使用自定义绘画路线,我建议您阅读:
更好地了解绘画在 Swing 中的工作原理以及您应该如何使用它
推荐阅读
- python - Arcpy 脚本不断给出错误“TypeError:预期的字符串或类似字节的对象”
- grpc - 使用 java-grpc-prometheus 获取 gRPC 服务指标
- typescript - 如何在打字稿中获取泛型类型参数?
- spring-boot - 如何在spring boot项目中定义一个没有content-type的rest服务
- docker - 无法安装 Docker Compose v2:“无效插件,执行格式错误”
- vue.js - 在 Vue.js 中添加单元格不起作用
- javascript - 有什么作用??在javascript代码中是什么意思?
- sql - 使用 WHERE 但不使用 GROUP BY 过滤
- postgresql - Postgres如何导入CSV忽略列ID是bigserial
- excel - 使用 VBA 将 Access 查询链接到 Excel