Problem med at få resource fra JAR

Tags:    java

Kan nogen fortælle mig hvad der er galt med fgl. kode:

BaseFont localbf = null;

try {
URL myfont = getClass().getResource("/OCRB-B12.TTF");
localbf = BaseFont.createFont(myfont.getPath(), BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
} catch (DocumentException ex) {
JOptionPane.showMessageDialog(null,"Fejl #102","Notice",JOptionPane.OK_OPTION);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null,"Kunne ikke få adgang til OCR skrifttypen!","Notice",JOptionPane.OK_OPTION);
}

Når jeg kører denne kode i netbeans virker det fint, men når jeg forsøger at køre med "java -jar minfil.jar" så får jeg problemer og den viser IOExceptionen. Filen ligger i "roden" af jarfilen, så kan ikke se der er noget galt med stien.



Har du prøvet, at bygge din .jar fil med netbeans?



Tror ikke det er nødvendigt, men det er formodentlig nået med hvordan du har bygget filen.
Kan vi få lov at se hvordan du har bygget filen, og hvilken Exception du får?:)



Jeg har bygget filen med NetBeans, dvs. jeg har ikke den vilde kontrol selv. Ville en udprint af MANIFEST.MF hjælpe?

Den exception jeg får er en IOException, dvs. JOptionPanen kører med beskeden "Kunne ikke få adgang til OCR skrifttypen!"

Håber der er nogen, der kan opklare dette mysterium for / med mig :)




Må vi se hvad 'jar tf minfil.jar' siger ?
Bare linjen med OCRB-B12.TTF.



ok, jeg har ændret koden til at give en ex.printStackTrace(); når IOExceptionen sker. Ved ikke om der er nogen formaterings standard på dette board, men nu prøver jeg. Uddata er som følger:

java.io.FileNotFoundException: C:\\Backup\\TechTo\\SportsManager\\dist\\SportsManager.jar!\\OCRB-B12.TTF (Den angivne sti blev ikke fundet)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at com.lowagie.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:87)
at com.lowagie.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:80)
at com.lowagie.text.pdf.TrueTypeFont.process(TrueTypeFont.java:582)
at com.lowagie.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:366)
at com.lowagie.text.pdf.TrueTypeFont.<init>(TrueTypeFont.java:339)
at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:464)
at com.lowagie.text.pdf.BaseFont.createFont(BaseFont.java:385)
at pdf.FIK75.setOCR(FIK75.java:106)
at frmKontingent.mnuPrintSelectedActionPerformed(frmKontingent.java:384)

at frmKontingent.access$100(frmKontingent.java:10)
at frmKontingent$2.actionPerformed(frmKontingent.java:66)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(UnknownSource)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(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)



Er der virkelig ingen der kan hjælpe?? ...



Er der virkelig ingen der kan hjælpe?? ...


Jo - men som Robert siger er vi nødt til at se output fra følgende kommando:

jar tvf <fil.jar>

ovenstående cmd viser indholdet i jar filen (en jar fil er "næsten bare" en zip fil)

Der er forskel på om du henter en resource vha. getClass().getResourceAsStream() ell. getClass().getClassLoader().getResourceAsStream() og om du har et slash ("/") først i argumentet.
Meen som sagt, hvis du sender output'et så er det lidt nemmere at sige hvad du skal skrive...

Mvh / Lars Borup Jensen




Problem løst, det viste sig at problemet ikke var at få adgang til resoursen, men at rettighederne i fonten ikke var tilstrækkelige.



Indlæg senest redigeret d. 15.03.2007 10:29 af Bruger #11309
t