Java 调用pack()后,JPanel getWidth()返回零

Java 调用pack()后,JPanel getWidth()返回零,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我相信我的代码会描述我写的东西,但问题是,当我运行它时,我得到了臭名昭著的“线程中的异常”Animator“java.lang.IllegalArgumentException:Width(0)和height(0)不能JFrame未打包,然后在游戏面板中请求高度和宽度 dbImage = createImage(getWidth(), getHeight()); 导致JPanel的0x0维度 原因是,为组件设置父组件后,Swing几乎立即调用(其中startGame驻留) 您可以在调用pack

我相信我的代码会描述我写的东西,但问题是,当我运行它时,我得到了臭名昭著的“线程中的异常”Animator“java.lang.IllegalArgumentException:Width(0)和height(0)不能JFrame未打包,然后在
游戏面板中请求高度和宽度

dbImage = createImage(getWidth(), getHeight());
导致
JPanel
0x0
维度

原因是,为组件设置父组件后,Swing几乎立即调用(其中
startGame
驻留)

您可以在调用pack之后显式调用
startGame

add(gamePanel, BorderLayout.CENTER);
pack();
gamePanel.startGame();

JFrame
尚未打包,因此在
GamePanel

dbImage = createImage(getWidth(), getHeight());
导致
JPanel
0x0
维度

原因是,为组件设置父组件后,Swing几乎立即调用(其中
startGame
驻留)

您可以在调用pack之后显式调用
startGame

add(gamePanel, BorderLayout.CENTER);
pack();
gamePanel.startGame();

作为一个注释,Swing组件已经使用了双缓冲区,并且使用了
这个。getGraphics
是非常不推荐的,因为它会产生不良效果和绘制问题…正如另一个注释:您应该尝试和,即设置xxSizeThanks作为输入!正如您所知,我正在学习图形编程,以及我所知道的大部分内容到目前为止,“杀手级Java游戏编程”已经问世“。作为一个注释,Swing组件已经使用了双缓冲区,并且使用了
此选项。getGraphics
是非常不推荐的,因为它可能会产生不良效果和绘制问题…正如另一个注释:您应该尝试设置XXSizeThanks作为输入!正如你所说,我只是在学习图形编程,到目前为止我所知道的大部分内容都是关于“杀手级Java游戏编程”。谢谢!我编辑了我的代码,所以我使用了一个方法getPWidth()&getPHeight(),而不是默认方法,这样它就可以工作了。谢谢!我编辑了我的代码,以便使用getPWidth()和getPHeight()方法,而不是默认方法,这样它就可以工作了。