将JPG加载到Swing Apps中
我想我在这里遇到了一些类路径蓝调。 我一直在关注这些例子 。 我阅读了教程 。 但似乎没有什么对我有用。
假设我在以下URI上有一个JPEG: C:\Users\MyUser\someIcon.jpeg
让我们说我有一个具有JPanel
的Swing应用程序,我想将这个JPEG添加到JPanel中(定位/布局无关紧要)。
如何做到这一点? 我没有收到任何错误或exception,只是没有看到JPEG加载。 我试图使用的代码是这样的:
String someIconUri = "C:\Users\MyUser\someIcon.jpeg"; URL imageUrl = getClass().getResource(someIconUri); ImageIcon imageIcon = new ImageIcon(imageUrl); myPanel.add(imageIcon);
请指教……我今天中午以来一直在处理这个……以及它的午夜。 提前感谢任何正确方向的推动 。
String someIconUri = "C:\Users\MyUser\someIcon.jpeg";
不,它不是’某个图标URI’,它根本不是有效的URI。 想想看,它甚至不是一个可编辑的声明,因为String
包含非法的转义字符!
它可能是……
String someIconUri = "file:///C:/Users/MyUser/someIcon.jpeg";
但是getResource()
既不需要也不实用,因为它只会在运行时类路径上找到资源。 只需直接从String
构造一个URL
。
但这实际上只是“答案的一部分”。 这就是原因。
在这种情况下,基本上有两种类型的资源。 应用程序资源和(为了更好的词)用户资源。
应用资源。
这些资源可能包括框架图标,按钮和菜单图标( Action
图标),标签图标等。 帮助文件(和相关图像),启动图像..
应将它们添加到单独的Jar(最常见)并添加到应用程序的运行时类路径中(使用清单或其他方式,如applet元素或JNLP文件)。
应该通过URL访问应用程序资源,可以使用getResource()
:
URL iconUrl = this.getClass().getResource("/icons/copy.jpg");
用户资源。
用户想要打开(编辑/打印)现有文本文档,从图像帧制作动画GIF,在其文件系统上编辑图像。
对于这些类型的资源(并假设应用程序是受信任的或没有安全管理器),请为用户提供JFileChooser
。 它将返回特定的现有File
或更多(取决于配置和使用的方式)。
在这种情况下,永远不要将File
转换为其他任何东西,只需直接使用实例。
从资源(值得一提)获取输入的大多数方法都将接受File
URL
或 InputStream
。
最后一个对于在内存中生成的内容很有用,或者从诸如套接字或JNLP API FileContents
对象之类的源中获取。 后者对沙盒应用程序特别感兴趣。 使用Java Web Start启动或嵌入。