2012-10-31 14 views
10

Tôi đang làm việc trên một ứng dụng Java Webstart. Điều này được cho là thu thập tài nguyên từ một tệp JAR được bao gồm trong phần tài nguyên trong tệp JNLP.Làm thế nào để tải một JAR tài nguyên với tên tập tin bao gồm cả umlauts?

Ngôn ngữ ứng dụng là tiếng Đức, vì vậy một số thư mục/tệp trong JAR bao gồm các ký tự 'ä', 'ö', 'ü' hoặc 'ß'. Nếu tôi bắt đầu ứng dụng này ngoại lệ sau đây được ném:

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) 

Nếu tôi mở tập tin JAR trong notepad ++ là nói mã hóa là ANSI. Vì vậy, tôi thay đổi nó thành UTF-8 nhưng sau đó nó thậm chí không biên dịch.

Tôi đang sử dụng Netbeans 7.2. Để phát triển, tôi bao gồm tệp JAR dưới dạng thư viện và cách này được liệt kê trong phần tài nguyên.

Trả lời

2

bây giờ tôi sử dụng JAR tool từ JDK như thế này

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

và nó làm việc tốt.

Tôi không hiểu chính xác lý do vì sao mã hóa tệp JAR được tạo ra vẫn là ANSI.