首页 文章

扩展画布的类[重复]时绘制方法出错

提问于
浏览
-2

这个问题在这里已有答案:

有人可以帮帮我吗?我做到了这一点

在sun.awt.RepaintArea的sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)的Frame.Painter.paint(Main.java:399)中的线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常.paint(RepaintArea.java:240)位于java.awt.Component.dispatchEvent的java.awt.Component.dispatchEventImpl(Component.java:4965)的sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:358) Component.java:4711)位于java.awt.EventQueue.access的java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)$ 500(EventQueue.java:97)java.awt.EventQueue $ 3.run(EventQueue.java) :709)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 )java.security.Protevows上的java.security.AccessController.doPrivileged(Native Method),Java.awt上的java.awt.EventQueue.dispatchEvent(EventQueue.java:728)中的JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) . 位于java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)的java.awt.EventDispatchThread.pumpEvents(EventDispatchThread)java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)中的EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) .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 回答

  • -2

    我假设你有以下代码:

    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”)

相关问题