Runnable jar(ExceptionInInitializerError)

时间:2015-01-13 20:19:08

标签: java jar

我遇到了一个我理解的问题,但我不知道如何修复它。 我的项目中有一个类包含带有图像或声音的静态字段,这样我就可以在任何地方使用它们而无需每次都重新创建变量。 其中一个参考领域(它们都是相同的):

public static ImageIcon mainMenuBg = new ImageIcon(Resources.class.getResource("img/menubg.png"));

现在我的问题是,当我运行它时,它在Eclipse中工作正常,但是当我将项目导出到可运行的JAR时,没有任何反应。然后我进入命令窗口并从那里运行它,由于我的图像,我有ExceptionInInitializerError。基本上,没有一个图像在运行时被识别,所以如果我删除每个图像调用,它都可以工作。

另外,值得注意的是,导出时,Main类列表并未真正更新。如果我更改了项目的主要名称,则不会将其添加到列表中。可能是我的主要课程专门有问题吗?如果是这样,我该如何解决?我试图重新创建它但没有改变。 有人可以告诉我这个问题吗?

这是printstacktrace:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
    at Client.<init>(Client.java:53)
    at Client$1.run(Client.java:37)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at Ressources.<clinit>(Ressources.java:41)
    ... 16 more

指向的行是我尝试从资源类加载图像的行。

此外,我的所有类都在同一个包中,默认类。

最后,这是&#39; jar tvf ...&#39;命令的结果:

     153 Tue Jan 13 21:43:36 CET 2015 META-INF/MANIFEST.MF
     0 Tue Jan 13 21:43:36 CET 2015 org/
     0 Tue Jan 13 21:43:36 CET 2015 org/eclipse/
     0 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/
     0 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/
     0 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/
   978 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/JIJC
    onstants.class
   714 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/JarR
srcLoader$ManifestInfo.class
  4735 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/JarR
srcLoader.class
  1505 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/Rsrc
URLConnection.class
  1841 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/Rsrc
URLStreamHandler.class
  1149 Tue Jan 13 21:43:36 CET 2015 org/eclipse/jdt/internal/jarinjarloader/Rsrc
URLStreamHandlerFactory.class
  1495 Tue Jan 13 21:43:06 CET 2015 ChatPrive$1.class
  1792 Tue Jan 13 21:43:06 CET 2015 ChatPrive$2.class
  1596 Tue Jan 13 21:43:06 CET 2015 ChatPrive$3.class
  1897 Tue Jan 13 21:43:06 CET 2015 ChatPrive$4.class
  1553 Tue Jan 13 21:43:06 CET 2015 ChatPrive$5.class
  7565 Tue Jan 13 21:43:06 CET 2015 ChatPrive.class
  2680 Tue Jan 13 21:43:06 CET 2015 Tour.class
  9003 Tue Jan 13 21:43:06 CET 2015 Move.class
  2622 Tue Jan 13 21:43:06 CET 2015 InfosPartie.class
  1448 Tue Jan 13 21:43:06 CET 2015 Message.class
  3262 Tue Jan 13 21:43:06 CET 2015 Roi.class
  1464 Tue Jan 13 21:43:06 CET 2015 Case.class
   987 Tue Jan 13 21:43:06 CET 2015 JoueurIA.class
   750 Tue Jan 13 21:43:06 CET 2015 MenuCopie$1.class
  1307 Tue Jan 13 21:43:06 CET 2015 MenuCopie$2.class
  2992 Tue Jan 13 21:43:06 CET 2015 MenuCopie.class
  7882 Tue Jan 13 21:43:06 CET 2015 ReceptionClient.class
  1138 Tue Jan 13 21:43:06 CET 2015 Chat$1.class
   851 Tue Jan 13 21:43:06 CET 2015 Chat$2.class
  3835 Tue Jan 13 21:43:06 CET 2015 Chat.class
  2263 Tue Jan 13 21:43:06 CET 2015 Fou.class
   832 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$1.class
  2081 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$2.class
  1401 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$3.class
  1216 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$4.class
  1216 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$5.class
  1216 Tue Jan 13 21:43:06 CET 2015 MenuPromotion$6.class
  4231 Tue Jan 13 21:43:06 CET 2015 MenuPromotion.class
  1501 Tue Jan 13 21:43:06 CET 2015 Jeu$1.class
   825 Tue Jan 13 21:43:06 CET 2015 Jeu$2.class
 10677 Tue Jan 13 21:43:06 CET 2015 Jeu.class
  1457 Tue Jan 13 21:43:06 CET 2015 ChatAll$1.class
  1570 Tue Jan 13 21:43:06 CET 2015 ChatAll$2.class
  1344 Tue Jan 13 21:43:06 CET 2015 ChatAll$3.class
  1914 Tue Jan 13 21:43:06 CET 2015 ChatAll$4.class
  1527 Tue Jan 13 21:43:06 CET 2015 ChatAll$5.class
  9326 Tue Jan 13 21:43:06 CET 2015 ChatAll.class
  1135 Tue Jan 13 21:43:06 CET 2015 PanelInfo$1.class
  1337 Tue Jan 13 21:43:06 CET 2015 PanelInfo$10.class
  1164 Tue Jan 13 21:43:06 CET 2015 PanelInfo$11.class
   963 Tue Jan 13 21:43:06 CET 2015 PanelInfo$12.class
  1335 Tue Jan 13 21:43:06 CET 2015 PanelInfo$13.class
   963 Tue Jan 13 21:43:06 CET 2015 PanelInfo$14.class
   830 Tue Jan 13 21:43:06 CET 2015 PanelInfo$15.class
   829 Tue Jan 13 21:43:06 CET 2015 PanelInfo$16.class
  1435 Tue Jan 13 21:43:06 CET 2015 PanelInfo$2.class
   576 Tue Jan 13 21:43:06 CET 2015 PanelInfo$3.class
  1748 Tue Jan 13 21:43:06 CET 2015 PanelInfo$4.class
  1356 Tue Jan 13 21:43:06 CET 2015 PanelInfo$5.class
  1552 Tue Jan 13 21:43:06 CET 2015 PanelInfo$6.class
  1556 Tue Jan 13 21:43:06 CET 2015 PanelInfo$7.class
   945 Tue Jan 13 21:43:06 CET 2015 PanelInfo$8.class
  1437 Tue Jan 13 21:43:06 CET 2015 PanelInfo$9.class
 16765 Tue Jan 13 21:43:06 CET 2015 PanelInfo.class
  1176 Tue Jan 13 21:43:06 CET 2015 MenuUtilisateurs$1.class
  1173 Tue Jan 13 21:43:06 CET 2015 MenuUtilisateurs$2.class
  1753 Tue Jan 13 21:43:06 CET 2015 MenuUtilisateurs$3.class
  2228 Tue Jan 13 21:43:06 CET 2015 MenuUtilisateurs$4.class
  2071 Tue Jan 13 21:43:06 CET 2015 MenuUtilisateurs.class
  3996 Tue Jan 13 21:43:06 CET 2015 Piece.class
  3830 Tue Jan 13 21:43:06 CET 2015 PartieSolo.class
  3300 Tue Jan 13 21:43:06 CET 2015 ConnexionClient.class
  1160 Tue Jan 13 21:43:06 CET 2015 EchecGUI$1.class
  8154 Tue Jan 13 21:43:06 CET 2015 EchecGUI.class
  6844 Tue Jan 13 21:43:06 CET 2015 Joueur.class
   677 Tue Jan 13 21:43:06 CET 2015 Client$1.class
   834 Tue Jan 13 21:43:06 CET 2015 Client$2.class
  2718 Tue Jan 13 21:43:06 CET 2015 Client$3.class
  1041 Tue Jan 13 21:43:06 CET 2015 Client$4.class
  1008 Tue Jan 13 21:43:06 CET 2015 Client$5.class
   983 Tue Jan 13 21:43:06 CET 2015 Client$6.class
  1096 Tue Jan 13 21:43:06 CET 2015 Client$7.class
  4611 Tue Jan 13 21:43:06 CET 2015 Client.class
  2783 Tue Jan 13 21:43:06 CET 2015 Pion.class
   663 Tue Jan 13 21:43:06 CET 2015 JoueurReel.class
  1620 Tue Jan 13 21:43:06 CET 2015 MessagePrive.class
  6302 Tue Jan 13 21:43:06 CET 2015 PartieEnLigne.class
  1911 Tue Jan 13 21:43:06 CET 2015 Cheval.class
  6817 Tue Jan 13 21:43:06 CET 2015 Ressources.class
  1235 Tue Jan 13 21:43:06 CET 2015 NotificationMessage$1.class
  1348 Tue Jan 13 21:43:06 CET 2015 NotificationMessage.class
  3835 Tue Jan 13 21:43:06 CET 2015 PartieAmi.class
  1355 Tue Jan 13 21:43:06 CET 2015 EmissionClient.class
  2999 Tue Jan 13 21:43:06 CET 2015 Reine.class
     0 Tue Jan 13 20:55:48 CET 2015 img/
   945 Sun Jan 11 19:40:24 CET 2015 img/attaque.png
196863 Fri Jan 09 22:59:04 CET 2015 img/board.png
595046 Sun Jan 11 22:04:40 CET 2015 img/board1.png
631303 Sat Jan 10 00:14:04 CET 2015 img/board2.png
   440 Sun Jan 11 22:32:28 CET 2015 img/boutonchat.png
   413 Sun Jan 11 22:32:46 CET 2015 img/boutonchatsel.png
   735 Sun Jan 11 21:53:46 CET 2015 img/boutonrecommencer.png
   793 Sun Jan 11 21:54:52 CET 2015 img/boutonrecommencersel.png
   258 Wed Dec 24 17:28:54 CET 2014 img/caseCible.png
   224 Sat Jan 10 18:23:04 CET 2015 img/casePleinePoss.png
  1100 Sat Jan 10 18:14:06 CET 2015 img/caseSelectionnee.png
   224 Sat Jan 10 18:14:30 CET 2015 img/caseVidePoss.png
  5962 Wed Dec 24 17:28:54 CET 2014 img/chevalblanc.png
  1203 Mon Jan 12 21:37:44 CET 2015 img/chevalblancmort.png
  1106 Sun Jan 11 00:40:14 CET 2015 img/chevalblancpromo.png
  5720 Wed Dec 24 17:28:54 CET 2014 img/chevalnoir.png
  1214 Mon Jan 12 21:37:44 CET 2015 img/chevalnoirmort.png
  1119 Sun Jan 11 00:40:50 CET 2015 img/chevalnoirpromo.png
  8080 Mon Jan 12 20:44:20 CET 2015 img/echec.png
 29956 Mon Jan 12 00:08:06 CET 2015 img/ecranpause.png
  3736 Thu Jan 08 00:14:42 CET 2015 img/fondlabel.png
  5783 Sun Jan 11 19:04:14 CET 2015 img/fondlabelblanc.png
  6968 Sun Jan 11 19:04:18 CET 2015 img/fondlabelnoir.png
  5327 Sun Jan 11 22:22:52 CET 2015 img/footer.png
  4087 Wed Dec 24 17:28:54 CET 2014 img/foublanc.png
  1024 Mon Jan 12 21:37:46 CET 2015 img/foublancmort.png
   887 Sun Jan 11 00:43:04 CET 2015 img/foublancpromo.png
  3987 Wed Dec 24 17:28:54 CET 2014 img/founoir.png
  1010 Mon Jan 12 21:37:48 CET 2015 img/founoirmort.png
   864 Sun Jan 11 00:43:24 CET 2015 img/founoirpromo.png
 10904 Sun Jan 11 01:19:48 CET 2015 img/historique.png
260917 Tue Jan 13 20:55:48 CET 2015 img/menubg.png
127477 Tue Jan 13 19:30:36 CET 2015 img/panelinfobg.png
   270 Sun Jan 11 22:13:34 CET 2015 img/pause.png
   256 Sun Jan 11 22:13:48 CET 2015 img/pausesel.png
  3817 Mon Jan 12 01:41:14 CET 2015 img/pionblanc.png
   979 Mon Jan 12 21:37:50 CET 2015 img/pionblancmort.png
  3813 Thu Jan 08 00:39:10 CET 2015 img/pionnoir.png
   992 Mon Jan 12 21:37:42 CET 2015 img/pionnoirmort.png
   379 Sun Jan 11 23:00:42 CET 2015 img/play.png
   377 Sun Jan 11 23:00:28 CET 2015 img/playsel.png
 37986 Mon Jan 12 01:17:54 CET 2015 img/promobg.png
   449 Sun Jan 11 22:58:14 CET 2015 img/redo.png
   439 Sun Jan 11 22:58:32 CET 2015 img/redosel.png
  5292 Wed Dec 24 17:28:54 CET 2014 img/reineblanc.png
  1245 Mon Jan 12 21:37:54 CET 2015 img/reineblancmort.png
  1140 Sun Jan 11 00:41:18 CET 2015 img/reineblancpromo.png
  5185 Wed Dec 24 17:28:54 CET 2014 img/reinenoir.png
  1222 Mon Jan 12 22:24:28 CET 2015 img/reinenoirmort.png
  1115 Sun Jan 11 00:41:40 CET 2015 img/reinenoirpromo.png
  5809 Mon Jan 12 00:11:32 CET 2015 img/reprendreBtn.png
  4946 Mon Jan 12 00:12:56 CET 2015 img/reprendreBtnsel.png
  5889 Wed Dec 24 17:28:54 CET 2014 img/roiblanc.png
  5717 Wed Dec 24 17:28:54 CET 2014 img/roinoir.png
  2152 Sun Jan 11 00:57:20 CET 2015 img/roque.png
  2144 Sun Jan 11 19:26:50 CET 2015 img/roqueblanc.png
  2099 Sun Jan 11 19:26:16 CET 2015 img/roquenoir.png
   529 Mon Jan 12 21:58:58 CET 2015 img/sonoff.png
   503 Mon Jan 12 21:59:24 CET 2015 img/sonoffsel.png
   686 Mon Jan 12 21:59:36 CET 2015 img/sonon.png
   623 Mon Jan 12 21:59:52 CET 2015 img/sononsel.png
   395 Sun Jan 11 22:43:30 CET 2015 img/surrender.png
   357 Sun Jan 11 22:43:46 CET 2015 img/surrendersel.png
   849 Mon Jan 12 19:40:22 CET 2015 img/tooltip.png
  4564 Wed Dec 24 17:28:54 CET 2014 img/tourblanc.png
  1146 Mon Jan 12 21:38:00 CET 2015 img/tourblancmort.png
  1008 Sun Jan 11 00:42:16 CET 2015 img/tourblancpromo.png
  4528 Wed Dec 24 17:28:54 CET 2014 img/tournoir.png
  1135 Mon Jan 12 21:38:04 CET 2015 img/tournoirmort.png
   986 Sun Jan 11 00:42:42 CET 2015 img/tournoirpromo.png
   453 Sun Jan 11 22:57:06 CET 2015 img/undo.png
   441 Sun Jan 11 22:56:48 CET 2015 img/undosel.png
  1326 Mon Jan 12 01:13:52 CET 2015 img/valider.png
  1393 Mon Jan 12 01:19:40 CET 2015 img/validersel.png
     0 Tue Jan 13 18:50:36 CET 2015 snd/
2248748 Mon Jan 12 23:35:38 CET 2015 snd/ambiancefeu.wav
 77868 Mon Jan 12 23:32:06 CET 2015 snd/attaque.wav
 25988 Tue Jan 13 00:08:06 CET 2015 snd/boutonclic.wav
397356 Mon Jan 12 21:02:50 CET 2015 snd/echec.wav
 43342 Sun Jan 11 23:59:36 CET 2015 snd/hover.wav
319532 Wed Jan 07 00:43:04 CET 2015 snd/message.wav
108464 Mon Jan 12 23:45:02 CET 2015 snd/played.wav
606552 Tue Jan 13 18:50:36 CET 2015 snd/promotion.wav
112156 Sat Jan 10 19:06:50 CET 2015 snd/select.wav

2 个答案:

答案 0 :(得分:1)

在深入了解文档后,我认为可能的问题是您使用的是相对路径而不是绝对路径,如下所述:

[http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading]

所以请尝试:

ImageIcon mainMenuBg = new ImageIcon(Resources.class.getResource("/img/menubg.png"));

答案 1 :(得分:0)

为您的图片使用这样的东西。

ClassLoader cldr = this.getClass().getClassLoader();
URL picture = cldr.getResource("files/gcf.jpg");
ImageIcon mainMenuBg = new ImageIcon(picture);

对于声音。

ClassLoader cldr = this.getClass().getClassLoader();
URL musicurl = cldr.getResource("files/gcf.wav");
try{   
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(musicurl); 
  Clip clip = AudioSystem.getClip();  
 clip.open(audioInputStream); 
  clip.start();
} 
catch (Exception ex){  
 System.out.println("loading ??");
}

(导入java.net。*;用于URL类) 将/ files文件夹放入/ src文件夹并创建JAR。