扩展 canvas 的 class 时绘画方法出错
Error on paint method when extended canvas's class
有人可以帮我吗?我已经做到了
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.access0(EventQueue.java:97) at
java.awt.EventQueue.run(EventQueue.java:709) at
java.awt.EventQueue.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.run(EventQueue.java:731) at
java.awt.EventQueue.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);
}
}
我不知道那里到底发生了什么。我的程序工作正常,但我每隔 运行 就对这个错误感到不安。请告诉我我该怎么做。
我假设您有以下代码:
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")
有人可以帮我吗?我已经做到了
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.access0(EventQueue.java:97) at java.awt.EventQueue.run(EventQueue.java:709) at java.awt.EventQueue.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.run(EventQueue.java:731) at java.awt.EventQueue.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);
}
}
我不知道那里到底发生了什么。我的程序工作正常,但我每隔 运行 就对这个错误感到不安。请告诉我我该怎么做。
我假设您有以下代码:
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")