我只想添加一个简单的图片,但我收到IOException
错误。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
我一直尝试了几种不同的方式,所有这些方法都失败了。
private JRadioButton A = new JRadioButton("1");
private JRadioButton B = new JRadioButton("2");
private JRadioButton C = new JRadioButton("3");
private JRadioButton D = new JRadioButton("3");
private ImageIcon image;
private JLabel picLabel;
public Q2 ()// Constructor
{
super("Ait shit");
GridBagLayout GB = new GridBagLayout();
GridBagConstraints Col = new GridBagConstraints();
getContentPane().setLayout(GB);
Col.fill = GridBagConstraints.HORIZONTAL;
image = new ImageIcon (getClass().getResource("1.jpg"));
picLabel= new JLabel(image);
Col.gridx =0;
Col.gridy =0;
GB.setConstraints(A,Col);
getContentPane().add(A);
Col.gridx =0;
Col.gridy =-1;
GB.setConstraints(B,Col);
getContentPane().add(B);
Col.gridx =0;
Col.gridy =-2;
GB.setConstraints(C,Col);
getContentPane().add(C);
Col.gridx =3;
Col.gridy =3;
GB.setConstraints(picLabel,Col);
getContentPane().add(picLabel);
setSize(400,320);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource().equals(4))
{
}
}
public static void main(String args[])
{
Q2 a = new Q2 ();
}
}
答案 0 :(得分:1)
为什么我会收到UnhandledIOExeption
?
快速查看代码会发现您尝试从File
读取,这可能会导致必须处理的IOExeption
。这一行:
BufferedImage myPicture = ImageIO.read(new File("42.png"));
throws
IOException
。
来自oracle:
public static BufferedImage read(文件输入) 抛出IOException
作为解码所提供文件的结果返回
BufferedImage
,其中ImageReader
自动从当前注册的文件中选择。文件包含在ImageInputStream
中。如果没有已注册的ImageReader
声明能够读取生成的流,则会返回null
。getUseCacheand
getCacheDirectory
的当前缓存设置将用于控制已创建的ImageInputStream
中的缓存。请注意,在从文件名创建
String;
之后,没有读取方法将文件名作为File
使用此方法。此方法不会尝试找到可以使用
ImageReaders
和File;
直接从IIORegistry
读取的ImageReaderSpi
。<强>参数:强>
输入 - 要读取的
File
。<强>返回:强>
包含输入的已解码内容的
BufferedImage
,或null
。<强>抛出:强>
IllegalArgumentException
- 如果输入为null
。
IOException
- 如果在阅读过程中发生错误。
这意味着您必须通过将行放在IOExeption
try
块中来处理catch
,如下所示:
try {
BufferedImage myPicture = ImageIO.read(new File("42.png"));
// do stuff with myPicture here
} catch (IOException e) {
// Handle the exaption here
e.printStackTrace();
}
另一个问题是myPicture
仅在try
范围内可见,因此您真正应该做的是在类级别声明变量并在Constractor
中初始化它们像:
private JRadioButton A;
private JRadioButton B;
private JRadioButton C;
private JRadioButton D;
private BufferedImage myPicture;
private JLabel picLabel;
// Constructor
public ExamPrac (){
A = new JRadioButton("1");
B = new JRadioButton("2");
C = new JRadioButton("3");
D = new JRadioButton("3");
try {
myPicture = ImageIO.read(new File("42.png"));
picLabel = new JLabel(new ImageIcon(myPicture));
} catch (IOException e) {
// Handle the Exception here
e.printStackTrace();
}
// your other code
}