gpt4 book ai didi

Java 2D 空指针异常

转载 作者:行者123 更新时间:2023-12-01 18:42:50 25 4
gpt4 key购买 nike

最近我开始编写一些 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。
  • 而是让 JVM 在您调用 repaint() 时调用它。 JVM 将传入一个有效的 Graphics 对象。
  • 最重要的——阅读painting with Swing tutorial 。你不能猜测这些东西并期望它起作用。
  • 确保您的paintComponent 方法保存在JPanel 或其他JComponent 派生组件中。
  • 通过对paintComponent 使用@Override 注解,确保您的覆盖有效。
  • 不要忘记在重写中调用 super.paintComponent(...) 方法。
  • 例如,让您的其他方法更改一个类字段,假设它更改一个名为 text 的字符串字段,然后调用 repaint(),然后让您的 paintComponent(... ) 方法使用文本字段来在 JPanel 中打印文本。这只是一个例子。您可以更改绘图组件的任何字段,然后在 paintComponent(...) 中使用它们。

关于Java 2D 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19212034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com