tente fazer um método que “saia” da estrutura de navegação do seu JAR e pegue o arquivo “em sí”. Depois, vc navega nele usando os métodos da classe JarFile.
(Eu tenho um método que faz isso, mas infelizmente eu não tenho ele aqui , agora).
M
marcobiscaro2112
Se der um System.out.println(resource), qual a saída (se executado da IDE e do JAR)?
Pensei em fazer algo assim… mas é que a solução que eu tenho é mais genérica. Mas pelo visto essa é a solução.
M
marcobiscaro2112
Mark, veja essa classe:
importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.net.JarURLConnection;importjava.net.URISyntaxException;importjava.net.URL;importjava.net.URLClassLoader;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;importjava.util.jar.JarEntry;importjava.util.jar.JarFile;publicclassImageLoader{publicMap<String,InputStream>getAll(Filefile,Map<String,InputStream>result)throwsIOException{if(result==null){result=newHashMap<String,InputStream>();}if(file.isDirectory()){// é diretório comum; usa recursividadefor(Filef:file.listFiles()){getAll(f,result);}}elseif(file.getName().endsWith(".png")){// é um png; adicionaresult.put(getName(file.getName()),newFileInputStream(file));}elseif(file.getName().endsWith(".jar")){// é um jar; vamos// brincar!JarFilejar=newJarFile(file);Enumeration<JarEntry>e=jar.entries();while(e.hasMoreElements()){JarEntryentry=e.nextElement();if(!entry.isDirectory()&&entry.getName().endsWith(".png")){Stringpath="jar:file://"+file.getAbsolutePath()+"!/"+entry.getName();URLurl=newURL(path);JarURLConnectionjarConn=(JarURLConnection)url.openConnection();Stringname=entry.getName();result.put(getName(name.substring(name.lastIndexOf('/')+1)),jarConn.getInputStream());}}}returnresult;}privateStringgetName(Strings){returns.substring(0,s.lastIndexOf("."));}publicstaticvoidmain(String[]args)throwsIOException,URISyntaxException{ImageLoaderil=newImageLoader();URLClassLoaderurlLoader=(URLClassLoader)ClassLoader.getSystemClassLoader();URL[]urls=urlLoader.getURLs();System.out.println(il.getAll(newFile(urls[0].toURI()),null));}}
Com pequenas mudanças na sua classe original e usando esses métodos acho que resolve.
M
marcobiscaro2112
O resultado do meu teste foi exatamente o mesmo para a IDE e para o JAR. Como você terá o InputStream de cada arquivo “.png” fica fácil carregá-los via ImageIO.