此代码在Windows XP上正常运行。但是在我的Windows 7机器上我无法看到图标,因为getResource返回null。我尝试过一条绝对的路径而且它也没有用。我不知道该怎么做,我在管理模式下运行Eclipse:
private static JButton createToolButton(String imgName, String altText, String toolTipText) {
String imagePath = IMG_URL + "/" + imgName;
URL imageUrl = SwingUtility.class.getResource(imagePath);
JButton button = new JButton();
button.setToolTipText(toolTipText);
if(imageUrl != null) //Image trouvé
button.setIcon(new ImageIcon(imageUrl, altText));
else
button.setText(altText);
return button;
}
答案 0 :(得分:1)
getResource()
方法将首先在父类加载器中搜索资源;如果父项为null,则搜索内置到虚拟机的类加载器的路径。如果失败,此方法将调用findResource(String)
来查找资源。因此,在所有这些之后,如果它返回null,则问题出在imagepath
ergo IMG_URL
上。另请注意,如果找不到资源,则返回null; 调用者没有足够的权限来获取资源。
答案 1 :(得分:1)
这是我的解决方案,不理想,但它有效。经过多次测试后,我觉得使用点符号进入当前目录并不能完全按预期使用基本的java实用程序。刚刚获得项目路径并将其拆分到我想要的位置,尚未在其他计算机上进行测试。
private static JButton createToolButton(String imgName, String altText, String toolTipText)
{
String imagePath = IMG_FOLDER_NAME + "\\" + imgName;
BufferedImage img = null;
JButton button = new JButton();
try
{
img = ImageIO.read(new File(projectPath() + imagePath));
}
catch (IOException e)
{
e.printStackTrace();
}
button.setToolTipText(toolTipText);
if(img != null)
button.setIcon(new ImageIcon(img, altText));
else
button.setText(altText);
return button;
}
private static String projectPath()
{
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("");
String pathArr[] = url.getPath().split(PATH_SEPARATOR);
return pathArr[0];
}