2012-10-31 12 views
10

Pracuję nad aplikacją Java Webstart. Ma to na celu zebranie zasobów z pliku JAR zawartego w sekcji zasobów w pliku JNLP.Jak załadować plik JAR zasobu z nazwami plików, w tym umlauty?

Język aplikacji jest niemiecki, więc niektóre foldery/pliki w JAR zawierają znaki "ä", "ö", "ü" lub "ß". Jeśli zacznę tej aplikacji jest następujący wyjątek:

java.lang.IllegalArgumentException: MALFORMED 
at java.util.zip.ZipCoder.toString(Unknown Source) 
at java.util.zip.ZipInputStream.readLOC(Unknown Source) 
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source) 
at com.sun.deploy.net.HttpDownloadHelper.decompressWrite(Unknown Source) 
at com.sun.deploy.net.HttpDownloadHelper.download(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source) 
at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source) 
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source) 
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

Gdybym otworzyć plik JAR w Notepad ++ to mówi kodowanie ANSI. Tak więc zmieniam go na UTF-8, ale potem nawet się nie kompiluje.

Używam Netbeans 7.2. Do opracowania dołączam plik JAR jako bibliotekę iw ten sposób jest on wymieniony w sekcji zasobów.

Odpowiedz

2

teraz użył JAR tool z JDK jak ten

jar cf <jar-file-name> <input-file(s)> 

i to działało dobrze.

Nie do końca rozumiem, dlaczego działa, ponieważ kodowanie pliku JAR, który jest tworzony, nadal jest ANSI.