我想显示含有从资源加载帮助CHM文件从资源加载的显示CHM文件:Java中,罐子
try
{
URL url = this.getClass().getResource("/resources/help.chm");
File file = new File(url.toURI());
Desktop.getDesktop().open(file); //Exception
}
catch (Exception e)
{
e.printStackTrace();
}
当项目从NetBeans中运行,显示帮助文件正确。 不幸的是,当程序从jar文件运行时,它不起作用;它会导致一个例外。
在我看来,由URI描述的jar的内部结构还没有被识别......有没有更好的方法?例如,使用BufferReader类?
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
与JPG文件类似的问题已得到修复与BufferedImage类
BufferedImage img = null;
URL url = this.getClass().getResource("/resources/test.jpg");
if (url!= null)
{
img = ImageIO.read(url);
}
无需任何转换到URI ...
感谢您的帮助......
.jar文件是一个具有不同扩展名的zip文件。 .jar文件中的条目本身不是一个文件,并且尝试从.jar资源URL创建File对象将永远不会工作。使用[getResourceAsStream](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResourceAsStream-java.lang.String-)和[复制流](http:/ /docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#copy-java.io.InputStream-java.nio.file.Path-java.nio.file.CopyOption .. .-)到一个临时文件。 – VGR
@ VGR:感谢您的评论。不幸的是,它可能无法完成。该程序将作为Java Web Start应用程序运行,需要一些额外的权利(或不是?)... – justik
如果您有权执行Desktop.open,我认为您将有权[创建一个临时文件]( http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createTempFile-java.lang.String-java.lang.String-java.nio.file.attribute。 FileAttribute ...-)。 – VGR