gpt4 book ai didi

java - 为什么我得到这个 NullPointerException?

转载 作者:行者123 更新时间:2023-11-29 06:43:20 24 4
gpt4 key购买 nike

我想不通。使用 new Canvas() 初始化 Canvas 后,引用它会导致 NullPointerException。文档告诉我这可能在 Canvas 未“启用”时发生,但我不知道启用意味着什么。我试图通过包含 while(!cvs.isEnabled()); 来调试它。但程序只是挂了。哪些情况会导致 Canvas 无法启用,我该如何解决?

Exception in thread "main" java.lang.NullPointerException
at matt.io.ConsoleCanvas.<init>(ConsoleCanvas.java:72)
at matt.io.ConsoleCanvas.<init>(ConsoleCanvas.java:51)
at matt.io.ConsoleCanvas.main(ConsoleCanvas.java:32)

public class ConsoleCanvas extends JFrame
{
private static final Font DEFAULT_FONT = new Font("Monospaced", Font.PLAIN, 12);
public static void main(String[] args)
{
ConsoleCanvas me = new ConsoleCanvas(); //ConsoleCanvas.java:32
//Program has crashed by this point, so rest of main removed to be concise
}

protected JTextField in;
private Canvas cvs;
private int row;
private int col;

public ConsoleCanvas()
{
this("Console Pane", 80, 10); //ConsoleCanvas.java:51
}

public ConsoleCanvas(String title, int rows, int cols)
{
in = new JTextField();
in.setEditable(true);
in.setFont(DEFAULT_FONT);
in.setColumns(cols);

cvs = new Canvas();
cvs.setSize(in.getWidth(), in.getHeight() * rows);
cvs.setFont(DEFAULT_FONT);
row = 0;
col = cvs.getGraphics().getFontMetrics().getHeight(); //ConsoleCanvas.java:72
//Program crashes at this line, so I'll leave out the rest for brevity again
//I've isolated the null to the Graphics returned by cvs.getGraphics()
}
}

最佳答案

我有一段时间没有使用 swing,但尝试在调用 get graphics 之前将 Canvas 添加到面板(面板也应该有某种形式的布局)。您可以在这里找到一个有趣的教程:http://docs.oracle.com/javase/tutorial/uiswing/“要出现在屏幕上,每个 GUI 组件都必须是包含层次结构的一部分。包含层次结构是一个组件树,它的根是一个顶级容器。我们稍后会向您展示一个。”所以我认为实例化 Canvas 类是不够的。只有在将图形对象添加到顶级容器后,图形对象才会分配给 Canvas 对象。

关于java - 为什么我得到这个 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014135/

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