gpt4 book ai didi

java - ImageIO.read 正在终止程序,没有错误

转载 作者:行者123 更新时间:2023-11-30 04:29:47 24 4
gpt4 key购买 nike

哈哈,刚才我彻底失败了。删除某些内容后上传代码。

无论如何,我使用 ImageIcons 加载了背景,但我尝试使用 BufferedImage,因为这就是我被告知必须这样做才能在其上绘制更多图像的方式。

BufferedImage 不返回错误,但不绘制任何内容。

代码如下:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Client {
static JFrame client = new JFrame();

public static void drawBackground() throws IOException {
BufferedImage background = ImageIO.read(new File("Resources/Images/Background.png"));
client.setTitle("Keldagrim: The lost Empire");
client.setSize(1280, 720);
client.setDefaultCloseOperation(client.EXIT_ON_CLOSE);
Container pane = client.getContentPane();
BackgroundPanel backgroundPanel = new BackgroundPanel(background);
pane.add(backgroundPanel);
client.pack();
client.setVisible(true);
}

public static void drawLogin() {
ImagePanel loginBox = new ImagePanel(new ImageIcon("Resources/Images/LoginBox.png").getImage());
client.add(loginBox);
client.repaint();
System.out.println("Painted");
}

public static void main(String[] args) {
try {
drawBackground();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
drawLogin();
}

}

class ImagePanel extends JPanel {

private Image img;

public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}

public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}

public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}

}


class BackgroundPanel extends JPanel {
BufferedImage backgroundImage;
public BackgroundPanel(BufferedImage image){
backgroundImage = image;
}

public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(backgroundImage, null, 50,50);
}
}

最佳答案

有很多事情不适合您......

  1. 您实际上并没有在任何地方调用 drawClient,因此框架从未被创建。我实际上会摆脱这个方法,因为它没有增加任何值(value),而且实际上混淆了问题。
  2. 您正在使用对背景图像的静态引用,这意味着无论您创建多少个“客户端”面板,整个应用程序中都只能使用一张图像。然后你无论如何都会将该引用传递给面板,这是一种浪费。
  3. 虽然您确实应该记录错误(并显示错误消息),但至少应该将堆栈跟踪转储到控制台,这将使您的生活变得更加轻松。
  4. 在完成框架设置后调用 setVisible,如果不这样做,就会发生有趣的事情

尝试使用类似...的东西

public class Client extends JPanel {

private Image backgroundImage;

public Client(Image backgroundImage) {
this.backgroundImage = backgroundImage;
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}

BufferedImage background = null;
try {
background = ImageIO.read(new File("Resources/Images/Background.png"));
JFrame client = new JFrame();
client.setTitle("Keldagrim: The lost Empire");
client.setSize(1280, 720);
client.setDefaultCloseOperation(client.EXIT_ON_CLOSE);
client.setContentPane(new Client(background));
client.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}

}
});
}
}

此外,作为旁注,您实际上并没有绘制背景,但我怀疑这是另一个问题;)

尝试看看

关于java - ImageIO.read 正在终止程序,没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com