我想我在这里遭受了一些类路径忧郁症。我一直在关注 examples .我读了tutorials .但似乎没有什么对我有用。
假设我在以下 URI 中有一个 JPEG:C:\Users\MyUser\someIcon.jpeg
假设我有一个带有 JPanel
的 Swing 应用程序,我想将这个 JPEG 添加到 JPanel 中(定位/布局无关紧要)。
SO 如何实现这一点? 我没有收到任何错误或异常,只是没有看到 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(最常见)并添加到应用程序的运行时类路径(使用 list 或其他方式,如 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 启动或嵌入.
关于java - 将 JPG 文件加载到 Swing 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462029/