有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

扩展画布的类时,绘制方法出现java错误

谁能帮帮我吗?我已经做到了

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Frame.Painter.paint(Main.java:399) at sun.awt.RepaintArea.paintComponent(RepaintArea.java:264) at sun.awt.RepaintArea.paint(RepaintArea.java:240) at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:358) at java.awt.Component.dispatchEventImpl(Component.java:4965) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

第399行的代码为:

class Painter extends Canvas{
    Image image;
    private URL url;
    public void setImage(String file) {
        url = null;
        try {
            url = new File(file).toURI().toURL();
        } catch (MalformedURLException ex) {
            System.out.println(ex.toString());
        }
        image = getToolkit().getImage(url);
        repaint();
    }
    public void paint(Graphics g) {
        double d = image.getHeight(this) / this.getHeight();
        double w = image.getWidth(this) / d;
        double x = this.getWidth() / 2 - w / 2;
        g.drawImage(image, (int) x, 0, (int) (w), this.getHeight(), this);
    }
}

我不知道那里到底发生了什么事。我的程序运行正常,但每次运行时都会因为这个错误而感到不安。请告诉我该怎么办


共 (1) 个答案

  1. # 1 楼答案

    我假设您具有以下代码:

    class Painter extends Canvas{
        Image image;
        private URL url;
        public void setImage(String file) {
            image = Toolkit.getDefaultToolkit().getImage(file);
            repaint();
        }
        public void paint(Graphics g) {
          if(image!=null) {
            double d = image.getHeight(this) / this.getHeight();
            double w = image.getWidth(this) / d;
            double x = this.getWidth() / 2 - w / 2;
            g.drawImage(image, (int) x, 0, (int) (w), this.getHeight(), this);
          }
        }
    }
    

    然后只需调用setImage(“c:/yourfilepath/yourfilename”)