gpt4 book ai didi

将图像显示到 JFrame 时出现 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-11-29 09:53:41 25 4
gpt4 key购买 nike

我尝试编写一个只显示图像的程序,一切正常,但控制台显示此警告...图像显示正常,但我想知道什么是控制台警告以及如何解决它这是我的主要类(class)......

    public class main extends JFrame{
Image ryu;
imagen objRyu;
public main(){
super("Imagen1");
this.setSize(500,500);
this.setVisible(true);
this.setResizable(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
objRyu = new imagen(ryu,"images/Ryu.png",100,100);
repaint();

}



public static void main(String[] args) {
new main();

}
public void paint(Graphics g){
Graphics g2 = (Graphics2D)g;
g2.setColor(Color.gray);
g2.fillRect(0, 0, 500, 500);
g2.drawImage(objRyu.getImagen(), 100, 50, objRyu.getAncho(), objRyu.getAlto(), null);


}

}

我的图像类

 public class imagen {
InputStream imgStream;
private Image imagen;
private int ancho;
private int alto;

public imagen(Image imagen, String ruta,int ancho, int alto){
this.imagen = imagen;
this.ancho = ancho;
this.alto = alto;

try{
imgStream = imagen.class.getResourceAsStream(ruta);
this.imagen = ImageIO.read(imgStream);
}catch(IOException e){
e.printStackTrace();
}


}

public int getAncho() {
return ancho;
}

public int getAlto() {
return alto;
}

public Image getImagen() {
return imagen;
}

和控制台日志...

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.paint(main.java:34)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1100(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.paint(main.java:34)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1100(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

最佳答案

覆盖的paint() 方法在调用setVisible(true) 方法后立即被调用,此时对象objRyu


一些要点:

  1. 不要直接在JFrame上绘制,而是使用JPanel等容器添加到JFrame中。

  2. 不要重写 paint() 方法,而是使用 JPanelpaintComponent() 方法。

    @Overrie
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    //your custom painting here
    }
  3. 在添加所有组件后最后调用JFrame.setVisible()

  4. 使用 SwingUtilities.invokeLater() 确保 EDT正确初始化。

    阅读更多

  5. 除非您正在修改现有逻辑,否则不要扩展任何类。

    阅读更多


阅读更多

关于将图像显示到 JFrame 时出现 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253358/

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