Java 加载图像时枚举抛出错误
这些都是用Java编写的。主要问题是,在Enum类中,我声明了许多不同的Enum。当每个都被声明时,有一个映像路径告诉构造函数从何处加载映像。但是当我调用我创建的enum.getImage()方法时,它会抛出ExceptionInInitializeError。以下是枚举类:Java 加载图像时枚举抛出错误,java,enums,Java,Enums,这些都是用Java编写的。主要问题是,在Enum类中,我声明了许多不同的Enum。当每个都被声明时,有一个映像路径告诉构造函数从何处加载映像。但是当我调用我创建的enum.getImage()方法时,它会抛出ExceptionInInitializeError。以下是枚举类: import java.awt.Image; import javax.swing.ImageIcon; import java.util.HashMap; public enum Cards { ACE
import java.awt.Image;
import javax.swing.ImageIcon;
import java.util.HashMap;
public enum Cards {
ACE_HEART(11,1,"acehearts.png"), ACE_SPADE(11,2,"acespades.png"), ACE_CLUB(11,3,"aceclubs.png"), ACE_DIAMOND(11,4,"acediamonds.png"),
TWO_HEART(2,5,"twohearts.png"), TWO_SPADE(2,6,"twospades.png"), TWO_CLUB(2,7,"twoclubs.png"), TWO_DIAMOND(2,8,"twodiamonds.png"),
THREE_HEART(3,9,"threehearts.png"), THREE_SPADE(3,10,"threespades.png"), THREE_CLUB(3,11,"threeclubs.png"), THREE_DIAMOND(3,12,"threediamonds.png"),
FOUR_HEART(4,13,"fourhearts.png"), FOUR_SPADE(4,14,"fourspades.png"), FOUR_CLUB(4,15,"fourclubs.png"), FOUR_DIAMOND(4,16,"fourdiamonds.png"),
FIVE_HEART(5,17,"fivehearts.png"), FIVE_SPADE(5,18,"fivespades.png"), FIVE_CLUB(5,19,"fiveclubs.png"), FIVE_DIAMOND(5,20,"fivediamonds.png"),
SIX_HEART(6,21,"sixhearts.png"), SIX_SPADE(6,22,"sixspades.png"), SIX_CLUB(6,23,"sixclubs.png"), SIX_DIAMOND(6,24,"sixdiamonds.png"),
SEVEN_HEART(7,25,"sevenhearts.png"), SEVEN_SPADE(7,26,"sevenspades.png"), SEVEN_CLUB(7,27,"sevenclubs.png"), SEVEN_DIAMOND(7,28,"sevendiamonds.png"),
EIGHT_HEART(8,29,"eighthearts.png"), EIGHT_SPADE(8,30,"eightspades.png"), EIGHT_CLUB(8,31,"eightclubs.png"), EIGHT_DIAMOND(8,32,"eightdiamonds.png"),
NINE_HEART(9,33,"ninehearts.png"), NINE_SPADE(9,34,"ninespades.png"), NINE_CLUB(9,35,"nineclubs.png"), NINE_DIAMOND(9,36,"ninediamonds.png"),
TEN_HEART(10,37,"tenhearts.png"), TEN_SPADE(10,38,"tenspades.png"), TEN_CLUB(10,39,"tenclubs.png"), TEN_DIAMOND(10,40,"tendiamonds.png"),
JACK_HEART(10,41,"jackhearts.png"), JACK_SPADE(10,42,"jackspades.png"), JACK_CLUB(10,43,"jackclubs.png"), JACK_DIAMOND(10,44,"jackdiamonds.png"),
QUEEN_HEART(10,45,"queenhearts.png"), QUEEN_SPADE(10,46,"queenspades.png"), QUEEN_CLUB(10,47,"queenclubs.png"), QUEEN_DIAMOND(10,48,"queendiamonds.png"),
KING_HEART(10,49,"kinghearts.png"), KING_SPADE(10,50,"kingspades.png"), KING_CLUB(10, 51, "kingclubs.png"), KING_DIAMOND(10, 52, "kingdiamonds.png");
int value,id;
Image image;
private HashMap<Integer,Cards> cardmap = new HashMap<Integer,Cards>();
public void setMap() {
for(Cards c : Cards.values()) {
cardmap.put(c.getValue(),c);
}
}
private Cards(int value, int id, String imagepath) {
this.value = value;
this.id = id;
ImageIcon i = new ImageIcon(this.getClass().getResource("img/" + imagepath));
Image image = i.getImage();
this.image = image;
}
public Image getImage() {
return image;
}
public int getId() {
return id;
}
public int getValue() {
return value;
}
public Cards getEnum(int id) {
return cardmap.get(id);
}
}
导入java.awt.Image;
导入javax.swing.ImageIcon;
导入java.util.HashMap;
公众普查卡{
ACE_HEART(11,1,“acehards.png”)、ACE_SPADE(11,2,“acespades.png”)、ACE_CLUB(11,3,“aceclubs.png”)、ACE_DIAMOND(11,4,“acedmonds.png”),
两颗心(2,5,“twohearts.png”)、两颗黑桃(2,6,“twospades.png”)、两颗俱乐部(2,7,“twoclubs.png”)、两颗钻石(2,8,“twodiamonds.png”),
THREE_HEART(3,9,“threehearts.png”)、THREE_SPADE(3,10,“threespades.png”)、THREE_CLUB(3,11,“threeclubs.png”)、THREE_DIAMOND(3,12,“threediamonds.png”),
四颗心(4,13,“fourhearts.png”)、四颗黑桃(4,14,“fourspades.png”)、四颗俱乐部(4,15,“fourclubs.png”)、四颗钻石(4,16,“fourdiamonds.png”),
FIVE_HEART(5,17,“fivehearts.png”)、FIVE_SPADE(5,18,“fivespades.png”)、FiveClub(5,19,“fiveclubs.png”)、fivediamonds(5,20,“fivediamonds.png”),
六颗心(6,21,“sixhearts.png”)、六颗黑桃(6,22,“sixspades.png”)、六颗俱乐部(6,23,“sixclubs.png”)、六颗钻石(6,24,“sixdiamonds.png”),
七颗心(7,25,“sevenhearts.png”)、七把黑桃(7,26,“sevenspades.png”)、七家俱乐部(7,27,“sevenclubs.png”)、七颗钻石(7,28,“sevendiamonds.png”),
八角心(8,29,“eightheart.png”)、八角铲(8,30,“eightspades.png”)、八角俱乐部(8,31,“eightclubs.png”)、八角钻石(8,32,“eightdiamonds.png”),
九心(9,33,“ninehearts.png”)、九黑桃(9,34,“ninespades.png”)、九俱乐部(9,35,“NineCrubs.png”)、九钻石(9,36,“ninediamonds.png”),
TEN_HEART(10,37,“tenhearts.png”)、TEN_SPADE(10,38,“tenspades.png”)、TEN_CLUB(10,39,“tenclubs.png”)、TEN_Diamonds(10,40,“tendiamonds.png”),
JACK_HEART(10,41,“jackhearts.png”)、JACK_SPADE(10,42,“jackpades.png”)、JACK_CLUB(10,43,“jackclubs.png”)、JACK_DIAMOND(10,44,“jackdiamonds.png”),
QUEEN_HEART(10,45,“Queenharts.png”)、QUEEN_SPADE(10,46,“queenspades.png”)、QUEEN_CLUB(10,47,“queenclubs.png”)、QUEEN_DIAMOND(10,48,“queendiamonds.png”),
KING_HEART(10,49,“Kinghards.png”)、KING_SPADE(10,50,“kingspades.png”)、KING_CLUB(10,51,“kingclubs.png”)、KING_DIAMOND(10,52,“kingdiamonds.png”);
int值,id;
图像;
私有HashMap cardmap=新HashMap();
公共void setMap(){
对于(卡片c:Cards.values()){
cardmap.put(c.getValue(),c);
}
}
私人卡(int值、int id、字符串imagepath){
这个值=值;
this.id=id;
ImageIcon i=新的ImageIcon(this.getClass().getResource(“img/”+imagepath));
Image=i.getImage();
这个图像=图像;
}
公共映像getImage(){
返回图像;
}
公共int getId(){
返回id;
}
public int getValue(){
返回值;
}
公共卡getEnum(内部id){
返回cardmap.get(id);
}
}
如果你对什么是错误有任何想法(不,我不是在要求代码),你能解释一下我做错了什么吗
编辑:完整堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at blackjack.Board.paint(Board.java:22)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paint(JComponent.java:1046)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paint(JComponent.java:1046)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5139)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1523)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1454)
at javax.swing.RepaintManager.paint(RepaintManager.java:1257)
at javax.swing.JComponent.paint(JComponent.java:1023)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1778)
at java.awt.Window.paint(Window.java:3390)
at javax.swing.RepaintManager$3.run(RepaintManager.java:825)
at javax.swing.RepaintManager$3.run(RepaintManager.java:802)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:802)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:745)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:725)
at javax.swing.RepaintManager.access$1000(RepaintManager.java:46)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1668)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:181)
at blackjack.Cards.<init>(Cards.java:26)
at blackjack.Cards.<clinit>(Cards.java:7)
... 40 more
线程“AWT-EventQueue-0”java.lang.ExceptionInInitializeError中的异常
blackjack.Board.paint(Board.java:22)
位于javax.swing.JComponent.paintChildren(JComponent.java:870)
位于javax.swing.JComponent.paint(JComponent.java:1046)
位于javax.swing.JComponent.paintChildren(JComponent.java:870)
位于javax.swing.JComponent.paint(JComponent.java:1046)
位于javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
位于javax.swing.JComponent.paintChildren(JComponent.java:870)
位于javax.swing.JComponent.paintooffscreen(JComponent.java:5139)
在javax.swing.repaitmanager$PaintManager.paintDoubleBuffered处(repaitmanager.java:1523)
在javax.swing.repaitmanager$PaintManager.paint(repaitmanager.java:1454)
位于javax.swing.repainmanager.paint(RepaintManager.java:1257)
位于javax.swing.JComponent.paint(JComponent.java:1023)
位于java.awt.graphicscalback$PaintCallback.run(graphicscalback.java:21)
位于sun.awt.sungraphicscalback.runOneComponent(sungraphicscalback.java:60)
位于sun.awt.sungraphicscalback.runComponents(sungraphicscalback.java:97)
位于java.awt.Container.paint(Container.java:1778)
位于java.awt.Window.paint(Window.java:3390)
在javax.swing.repaitmanager$3.run(repaitmanager.java:825)
在javax.swing.repaitmanager$3.run(repaitmanager.java:802)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:802)
位于javax.swing.repaitmanager.paintDirtyRegions(repaitmanager.java:745)
位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:725)
在javax.swing.repaitmanager.access$1000(repaitmanager.java:46)
在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1668)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
在java.awt.EventQueue.access$400(EventQueue.java:81)
在java.awt.EventQueue$2.run(EventQueue.java:633)
位于java.awt.EventQueue$2.run(EventQueue.java:631)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:184)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:174)
在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread
ImageIcon i = new ImageIcon(this.getClass().getResource("img/" + imagepath));
ImageIcon i = new ImageIcon(this.getClass().getResource("/img/" + imagepath));