当前位置: 首页 > 知识库问答 >
问题:

当使用BufferdImage和ImageIO加载图像时,它清除了我的整个框架,不显示图像

梁韬
2023-03-14

我和制作一个程序使用基本的GUI涉及按钮,框架,和面板,一切都很好,直到我试图加载一个图像从我的项目文件夹。当我添加代码行时

   try{
         titleImage = ImageIO.read(new File("mouse_title_resize.png"));
       } 
    catch(Exception e){}

在我运行程序之后,我的整个框架就变成了空白,而在它上面有一些JButtons之前。在try-catch行之前,我所有的代码都工作得很好,我测试了一下,看看唯一破坏它的是这行代码。我没有收到任何错误或任何东西,我有我的项目文件夹中的图像,似乎图像加载很好,除了它不会出现在框架上,框架上的所有其他东西都消失了。我只是不明白为什么当我加载图像时,它清除了我的整个框架。

以下是完整的代码:

这是扩展JFrame的类

包Mouse.click.game;

导入java.awt.Dimension;

导入java.awt.Point;

//Constants to define the frame width and height including borders
public final int FRAME_WIDTH = 600;
public final int FRAME_HEIGHT = 600;
//Dimension from Toolkit to be able to get width and height of screen
public Dimension sizeTool = Toolkit.getDefaultToolkit().getScreenSize();
//Using sizeTool to get width of screen
public double xResolution = sizeTool.getWidth();
//Using sizeTool to get height of screen
public double yResolution = sizeTool.getHeight();
//Creating a point object that is defined as the center of the screen
public Point middleOfScreen = new Point((int) (xResolution / 2) - (FRAME_WIDTH / 2), (int) (yResolution / 2) - (FRAME_HEIGHT / 2));

public MouseClickGame() {
    super("WELCOME :D");
    setSize(FRAME_WIDTH, FRAME_HEIGHT);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    setLocation(middleOfScreen);
    add(new MouseClickPanel());

}

public static void main(String[] args) {

    //Calling constructor
    MouseClickGame mainClickGame = new MouseClickGame();

}

包Mouse.click.game;

导入java.awt.Dimension;

导入java.awt.image.BufferedImage;

导入javax.swing.jlabel;

导入javax.swing.jPanel;

公共类MouseClickPanel扩展JPanel{

JButton buttonPlay = new JButton("Play");
JButton buttonContinue = new JButton("Continue");
JButton buttonOptions = new JButton("Options");
JButton buttonExit = new JButton("Exit");

BoxLayout boxLay = new BoxLayout(this, BoxLayout.Y_AXIS);

Dimension menuButtonSize = new Dimension(300, 30);
Dimension spacingBetweenButtons = new Dimension(0, 30);

BufferedImage titleImage;

public MouseClickPanel() {

    try {
        titleImage = ImageIO.read(new File("C:\\Users\\Justin\\Desktop\\mouse_title.png"));
    } catch (IOException e) {

    }

    setLayout(boxLay);
    add(Box.createVerticalGlue());
    add(new JLabel(new ImageIcon(titleImage)));

    //Adding glue to force buttons away from top of panel
    add(Box.createVerticalGlue());
    add(buttonPlay);
    //Vertical spacing between buttons
    add(Box.createRigidArea(spacingBetweenButtons));
    add(buttonContinue);

    add(Box.createRigidArea(spacingBetweenButtons));
    add(buttonOptions);

    add(Box.createRigidArea(spacingBetweenButtons));
    add(buttonExit);
    //Adding glue to force buttons away from bottom of panel
    add(Box.createVerticalGlue());

    //Aligning all buttons to centered horizontally
    buttonPlay.setAlignmentX(Box.CENTER_ALIGNMENT);
    buttonContinue.setAlignmentX(Box.CENTER_ALIGNMENT);
    buttonOptions.setAlignmentX(Box.CENTER_ALIGNMENT);
    buttonExit.setAlignmentX(Box.CENTER_ALIGNMENT);

    //Setting button sizes
    buttonPlay.setMaximumSize(menuButtonSize);
    buttonContinue.setMaximumSize(menuButtonSize);
    buttonOptions.setMaximumSize(menuButtonSize);
    buttonExit.setMaximumSize(menuButtonSize);

}

}

从字面上看,如果我得到titleImage=并添加(新的JLabel)行,一切都恢复正常

共有1个答案

邵飞白
2023-03-14

我猜你只是把路走错了--一个常见的错误。在这种情况下,您应该得到一个异常,如下所示:

Exception in thread "main" javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1301)
    at jonathanrmiproject.MyProject.main(JonathanRmiProject.java:24)

这个简单的例子对我很有效:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.naming.NamingException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class MyProject {
    public static void main(String[] args) throws NamingException, IOException {
        BufferedImage img = ImageIO.read(new File("myimage.jpg"));
        JLabel label = new JLabel(new ImageIcon(img));
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(label);
        f.pack();
        f.setLocation(200, 200);
        f.setVisible(true);
    }
}

我使用的是Netbeans IDE,并将图像文件保存到“C:\users\david.sharpe\myproject\myimage.jpg”。

我应该补充的是,如果不是这样,而你确实有正确的路径,那么你需要发布一个更详细的问题,以便有人可以帮助你。包括重现问题的代码。

 类似资料:
  • 问题内容: 我知道互联网上有成千上万个示例,但是对于脚本,我已经必须在检索数据时显示加载的gif图像。我的Java知识很差,因此我想问如何更改以下内容: 我的div在这里: 谢谢。约翰 问题答案: 假设您在页面上某处有一个标签,其中包含您的加载消息: 您可以在ajax调用中添加两行:

  • 问题内容: 我正在尝试从我正在编写的iOS 8框架(在Swift中)加载图像。我正在使用Xcode 6 Beta 6 如果图像存储在我的框架中,则此代码不起作用(即加载图像): 如果映像存储在主机应用程序(使用框架)中,则将正确加载映像(从框架内的代码)。 我可以看到该阶段包含了框架。 我还将故事板文件用作框架中的资源。并正确加载。 我尝试重命名框架的Images.xcassets以避免与主机应用

  • 我试图创建一个小行星游戏,但我已经在一开始就很挣扎了:我想在游戏开始前创建一个倒计时。为了做到这一点,我使用了一个计时器,当按下按钮“开始”时开始,它(应该)每秒钟加载一个,然后显示在一个上。 在我加上计时器之前,整个程序运行得很好。然而,图像仍在绘制中,的方法仍在完全使用。但是,图像不会出现在我的上。 有人能发现错误吗?我真的不明白问题是什么,虽然我对计时器不熟悉,所以如果我做的事情真的很愚蠢,

  • 我的窗口(SWT)中有以下UI布局: null null 如果我删除它,那么闪烁和重复的调用就消失了,但是我仍然不能显示任何大于5x5的图像,它们根本不会显示。 这是怎么回事..?我应该切换到GridLayout吗?我基本上只想显示两个组,每个组将包含一个字段/画布的垂直列表。

  • 如何显示一个进度条,同时获取图像从URL在线圈。?

  • 问题内容: 我目前正在使用一个Web应用程序,该应用程序的页面显示一个图表(.png图像)。在页面的另一部分上,有一组链接,单击这些链接后,整个页面将重新加载,并且外观与之前完全相同,除了页面中间的图表。 我要做的是单击页面上的链接后,页面上的图表才更改。由于页面大约100kb大,这将极大地加快处理速度,并且真的不想为了显示此页面而重新加载整个页面。 我一直在通过JavaScript执行此操作,到