[我正在使用Java swing应用程序,在该应用程序中,我试图为国际象棋人物的作品加载图像,并且一切都很好,直到突然间出现错误:
Exception in thread "main" java.lang.StackOverflowError
at java.base/java.lang.String.indexOf(String.java:1612)
at java.base/java.lang.String.indexOf(String.java:1569)
at java.base/java.net.URLStreamHandler.parseURL(URLStreamHandler.java:151)
at java.base/sun.net.www.protocol.file.Handler.parseURL(Handler.java:67)
at java.base/java.net.URL.<init>(URL.java:696)
at java.base/java.net.URL.<init>(URL.java:563)
at java.base/jdk.internal.loader.URLClassPath$FileLoader.getResource(URLClassPath.java:1222)
at java.base/jdk.internal.loader.URLClassPath$FileLoader.findResource(URLClassPath.java:1211)
at java.base/jdk.internal.loader.URLClassPath.findResource(URLClassPath.java:294)
at java.base/jdk.internal.loader.BuiltinClassLoader.findResourceOnClassPath(BuiltinClassLoader.java:499)
at java.base/jdk.internal.loader.BuiltinClassLoader.findResource(BuiltinClassLoader.java:323)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1400)
at java.base/java.lang.Class.getResource(Class.java:2741)
at model.Board.getImageIcon(Board.java:246)
at model.Board.setBoard(Board.java:49)
at model.Board.<init>(Board.java:37)
at model.Board.getBoardInstance(Board.java:28)
at controler.FigureAction.<init>(FigureAction.java:15)
at model.Figure.<init>(Figure.java:30)
并且at model.Board.setBoard(Board.java:49)
中的部分在之后(仅该部分)被记录了很多次。在调试错误时,我看到它反复输入相同的方法,直到发生堆栈溢出错误为止。在那里,我正在从本地地址检索图像。方法如下:
private ImageIcon getImageIcon(String path,String description) {
URL imgURL = getClass().getResource(path);
if (imgURL != null) {
Image ii=new ImageIcon(imgURL, description).getImage().getScaledInstance(70, 70, Image.SCALE_SMOOTH);
ImageIcon im=new ImageIcon(ii);
return im;
}
else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
这里叫]
public void setBoard(Color c1,Color c2,Dimension dim) { for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { Point point=new Point(i,j); if ((i+j)%2==0) { if(i==0 && j==0) { ***Figure f=new Figure (null,null,"white_rook",null,getImageIcon("/images/WhiteRook.png",null));*** fields[i][j]=new Field(c1,new Position(point.x,point.y),i*8+j,f); f.field=fields[i][j]; f.pos=new Position(point.x,point.y); fields[i][j].add(f); figures[i][j]=f; }
是方法setBoard的一部分,基本上将每个部分放在字段上。图类看起来像:
public class Figure extends JPanel { public Field field; public Color color; public String name; public Movement movement; public ImageIcon imageIcon; public Position pos; public Figure(Field field, Color color, String name, Movement movement, ImageIcon icon) { this.field = field; this.color = color; this.name = name; this.movement = movement; this.imageIcon = icon; this.setPreferredSize(new Dimension(70, 70)); this.addMouseMotionListener(new FigureAction()); this.addMouseListener(new FigureAction()); this.setBackground(null); } }
这里,我正在从png图像制作缩放后的imageIcon并将其取回。如果有人能够告诉我可能是什么问题,我将不胜感激。我想我在这里错过了重要的事情,但目前不知道该去哪里看看。.预先感谢。
[我正在一个Java swing应用程序上,在该应用程序中,我试图为国际象棋棋子的零件加载图像,并且一直运行良好,直到突然之间,我收到了错误:线程“ ...中的异常”]
根据您提供的堆栈跟踪和代码:
at model.Board.setBoard(Board.java:49)
at model.Board.<init>(Board.java:37)
at model.Board.getBoardInstance(Board.java:28)
at controler.FigureAction.<init>(FigureAction.java:15)
at model.Figure.<init>(Figure.java:30)