【发布时间】:2018-01-30 02:23:21
【问题描述】:
我正在设计的 Swing GUI 中的一个 JPanel 使用 AWT 图形来绘制只能在运行时绘制的图形。 Eclipse WindowBuilder 不再想要绘制我的任何摆动 GUI,因为现在 awt 绘制代码中存在空指针异常。请注意,这不是关于空指针异常的一般问题。这是特定于 WindowBuilder 以及如何处理在 WindowBuilder 上下文中没有意义的代码。如果 WindowBuilder 试图解释我的 swing gui,是否有一种方法可以忽略 awt 绘制代码?
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class previewPanel extends JPanel {
private static final long serialVersionUID = 3787425749772291816L;
public final static int WIDTH = 918;
public final static int HEIGHT = 125;
public void paint(Graphics g) {
BufferedImage img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_3BYTE_BGR);
Graphics gBuffer = img.getGraphics();
gBuffer.setColor(Color.WHITE);
gBuffer.fillRect(0, 0, WIDTH, HEIGHT);
businessClass.object.paint(gBuffer);
g.drawImage(img, 0, 0, this);
try {
Thread.sleep(20);
} catch (Exception e) {
}
repaint();
}
在这个特定的示例中,previewPanel 嵌入到我在 WindowBuilder 中使用的整体 swing gui 中,businessClass.object 仅在运行时初始化(Main 调用 businessClass 的初始化,而不是 gui 本身)。我只展示了一个示例,但还有很多其他情况,我调用了运行时对象的绘制代码或需要使用 awt 图形绘制的对象列表。
【问题讨论】:
-
调试 NullPointerException 的启发式方法几乎总是相同的:您应该认真阅读异常的堆栈跟踪以找到出错的代码行,引发异常的行,然后仔细检查该行,找出哪个变量为空,然后回溯到您的代码以查看原因。你会一次又一次地遇到这些,相信我。
-
您在该代码中还有许多其他问题——永远不要在 Swing gui 中调用 sleep 更不用说它的绘画方法,也不要在绘画方法中调用 repaint。请改用Swing Timer。
-
感谢您的建议。我将返工以更符合摇摆要求。我强烈不同意这是一个通用空指针问题的副本。我确切地知道为什么会出现空指针异常:我在原始问题中对其进行了彻底的解释。这是一个关于多个执行环境的问题(实际运行程序与使用 WindowBuilder)。我在问如何对仅在另一个环境中才有意义的代码进行分区。
标签: java eclipse swing awt windowbuilder