从 JPanel class 创建对象时出现溢出错误
Creating an object from a JPanel class giving overflow error
我正在尝试从扩展 JPanel 的 class 创建一个对象,但是当我 运行 它时,我得到一个 WhosebugError。
错误信息:"Exception in thread "main" java.lang.WhosebugError"
Main.java
public class Main {
public static int width = 600, height = 400;
public static String title = "tec9meister";
public static void createWindow(){
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setResizable(false);
//createPane(frame);
PaintPanel p = new PaintPanel();
p.setSize(100,100);
frame.add(p);
frame.setVisible(true);
}
private static void createPane(JFrame frame) {
PaintPanel pane = new PaintPanel();
pane.setSize(width, height);
pane.setFocusable(true);
pane.requestFocus();
frame.add(pane);
}
public static void main(String[] args) {
createWindow();
}
}
PaintPanel.java
public class PaintPanel extends JPanel{
public PaintPanel() {
Target t = new Target(100, 100, 10, 10);
}
}
Target.java
public class Target extends PaintPanel {
private int x;
private int y;
private int width;
private int height;
public Target(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
您应该始终 运行 在 Event Dispatch Thread
中使用此 Swing 程序:
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
createWindow();
} catch (IOException e) {
e.printStackTrace();
}
}
});
如果这不能解决问题,请尝试将 JPanel
添加到框架的 contentPane
:
frame.getContentPane().add(panel);
如果您尝试在 PaintPanel 的构造函数中创建扩展 PaintPanel 的 class 实例,由于递归调用相同的构造函数,这将导致 WhosebugError。特别是,TestClass 不能是 Target,因为 Target 扩展了 PaintPanel。
我正在尝试从扩展 JPanel 的 class 创建一个对象,但是当我 运行 它时,我得到一个 WhosebugError。 错误信息:"Exception in thread "main" java.lang.WhosebugError"
Main.java
public class Main {
public static int width = 600, height = 400;
public static String title = "tec9meister";
public static void createWindow(){
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setResizable(false);
//createPane(frame);
PaintPanel p = new PaintPanel();
p.setSize(100,100);
frame.add(p);
frame.setVisible(true);
}
private static void createPane(JFrame frame) {
PaintPanel pane = new PaintPanel();
pane.setSize(width, height);
pane.setFocusable(true);
pane.requestFocus();
frame.add(pane);
}
public static void main(String[] args) {
createWindow();
}
}
PaintPanel.java
public class PaintPanel extends JPanel{
public PaintPanel() {
Target t = new Target(100, 100, 10, 10);
}
}
Target.java
public class Target extends PaintPanel {
private int x;
private int y;
private int width;
private int height;
public Target(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
您应该始终 运行 在 Event Dispatch Thread
中使用此 Swing 程序:
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
createWindow();
} catch (IOException e) {
e.printStackTrace();
}
}
});
如果这不能解决问题,请尝试将 JPanel
添加到框架的 contentPane
:
frame.getContentPane().add(panel);
如果您尝试在 PaintPanel 的构造函数中创建扩展 PaintPanel 的 class 实例,由于递归调用相同的构造函数,这将导致 WhosebugError。特别是,TestClass 不能是 Target,因为 Target 扩展了 PaintPanel。