扩展画布类时绘制方法出错



有人能帮我吗?我做了这个

线程"AWT-EventQueue-0"java.lang.NullPointerException中的异常在帧处。Painter.paint(Main.java:399)sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)位于sun.awt.RepaintArea.paint(RepaintArea.java:240)位于sun.awt.windows.WComponentPeer.handleEvent(WComponent Peer.java:358)java.awt.Component.dispatchEventImpl(Component.java:4965)java.awt.Component.dispatchEvent(Component.java:4711)位于的java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)java.awt.EventQueue.access$500(EventQueue.java:97)java.awt.EventQueue$3.run(EventQueue.java:709)java.awt.EventQueue$3.run(EventQueue.java:703)位于的java.security.AccessController.doPrivileged(本机方法)java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)在java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)在java.awt.EventQueue$4.run(EventQueue.java:731)java.awt.EventQueue$4.run(EventQueue.java:729)位于的java.security.AccessController.doPrivileged(本机方法)java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)在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);
}
}

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

我假设您有以下代码:

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

最新更新