繁体   English   中英

Java 2D NullPointerException

[英]Java 2D NullPointerException

最近,我开始对Java 2D进行编码。

我做的:

    public void paintComponent(Graphics comp) {
         Graphics2D comp2D = (Graphics2D) comp;
         Font fontx = new Font("Verdana", Font.BOLD, 5);
         comp2D.setFont(fontx);
         comp2D.drawString("Hello World!", 5, 50);
}  

我确实导入了JFrame和java.awt。*,但是仍然存在问题。

运行它时,我得到以下信息:

    Exception in thread "main" java.lang.NullPointerException
    at game.Game.paintComponent(Game.java:41) - comp2D.setFont(fontx); - Sets Font
    at game.Game.next(Game.java:36) - paintComponent(null); - calls the paintComponent public void from the next() public void
    at game.Game.main(Game.java:26) - next.next(); - calls a public void called "next" using an object called "next" (this public void throws InterruptedException)
Java Result: 1

我该如何解决?

您声明:

Exception in thread "main" java.lang.NullPointerException
at game.Game.paintComponent(Game.java:41) -  
    comp2D.setFont(fontx); - Sets Font

这意味着comp2D为null,并且您试图在null变量上调用方法。

at game.Game.next(Game.java:36) - paintComponent(null); 
     - calls the paintComponent public void from the next() public void

这意味着您要直接调用paintComponent并传递null!

因此,您要直接调用paintComponent并传递null! 毫不奇怪,Graphics对象为null,如果您尝试在其上调用方法,它将抛出NPE。

解:

  • 您几乎永远不会直接调用paintComponent。
  • 而是在调用repaint()时让JVM调用它。 JVM将传入有效的Graphics对象。
  • 最重要的是- 使用Swing教程阅读绘画 您无法猜测这些东西并期望它能工作。
  • 确保您的paintComponent方法保存在JPanel或其他JComponent派生的组件中。
  • 通过对paintComponent使用@Override批注,确保您的替代有效。
  • 不要忽略在覆盖范围内调用super.paintComponent(...)方法。
  • 例如,让您的其他方法更改一个类字段,比如说让它更改一个名为text的String字段,然后调用repaint() ,然后让paintComponent(...)方法使用该文本字段在屏幕上打印文本JPanel的。 这只是一个例子。 您可以更改任何图形组件的字段,然后在paintComponent(...)内部使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM