我已经围绕SO和Google链接做了很多阅读。
我还没弄明白如何正确地将图像添加到eclipse gui项目中,这样系统就能识别它。我知道有一些关于CLASSPATH的mumbojumbo但它可能不应该这么难做。
首先让我描述一下我正在做的事情......(如果有人能够纠正我,我们将不胜感激。)
这是我的方法。
我使用“导入向导”(右键单击,“导入”,“常规”,“文件”)将图像添加到“导入目录”中,我称之为“/ resources”
Eclipse在eclipse包资源管理器的树视图中自动创建一个名为“resources”的文件夹。在“参考图书馆”的条目下。
注意,“资源”不在“引用的库”下,它在树中处于同一级别。
然后我使用以下代码:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/resources/image.jpg");
Image logo = ImageIO.read(input);
此时,我运行测试程序并收到此错误:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at Test.main(Test.java:17)
提前感谢您的帮助!
答案 0 :(得分:36)
将图像放在源文件夹中,而不是普通文件夹中。即:右键单击项目 - >新 - >源文件夹。将图像放在该源文件夹中。然后:
InputStream input = classLoader.getResourceAsStream("image.jpg");
请注意,路径被省略。那是因为图像直接位于路径的根部。您可以在源文件夹下添加文件夹,以便根据需要进一步细分。或者您可以将图像放在现有的源文件夹下(通常称为src
)。
答案 1 :(得分:0)
您可以重新保存图像并从字面上找到项目的src文件,并在保存时将其添加到该文件中。对我来说,我必须去netbeans并找到我的项目,当它出现时它有3个文件src是最后一个。不要点击任何一个只是保存你的照片。这应该工作。现在调整它可能是一个不同的问题,我现在正在研究lol
答案 2 :(得分:0)
如果您仍然遇到Eclipse查找文件的问题,您可以尝试以下方法:
通过在main中打印以下内容来验证默认工作目录:
System.out.println("Working dir: " + System.getProperty("user.dir"));
对于上面的(1),我将以下调试代码放在我试图访问的特定文件中:
File imageFile = new File(source);
System.out.println("Canonical path of target image: " + imageFile.getCanonicalPath());
if (!imageFile.exists()) {
System.out.println("file " + imageFile + " does not exist");
}
image = ImageIO.read(imageFile);
无论出于何种原因,我最终忽略了大多数其他帖子,告诉我将图像文件放在“src”或其他变体中,因为我验证了系统正在查看Eclipse项目目录层次结构的根目录(例如,$ HOME / workspace / myProject)。
将图像放在src /中(自动复制到bin /)并没有在Eclipse Luna上做到这一点。
答案 3 :(得分:0)
将图像添加到项目中并查看图像非常简单。 首先在项目中创建一个文件夹,其中可以包含任何类型的图像。
然后右键单击Project ->>
转到构建路径->>
配置构建路径->>
添加类文件夹->>
选择您刚创建的用于存储图像的文件夹)项目名称下。
class Surface extends JPanel {
private BufferedImage slate;
private BufferedImage java;
private BufferedImage pane;
private TexturePaint slatetp;
private TexturePaint javatp;
private TexturePaint panetp;
public Surface() {
loadImages();
}
private void loadImages() {
try {
slate = ImageIO.read(new File("images\\slate.png"));
java = ImageIO.read(new File("images\\java.png"));
pane = ImageIO.read(new File("images\\pane.png"));
} catch (IOException ex) {
Logger.`enter code here`getLogger(Surface.class.getName()).log(
Level.SEVERE, null, ex);
}
}
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
slatetp = new TexturePaint(slate, new Rectangle(0, 0, 90, 60));
javatp = new TexturePaint(java, new Rectangle(0, 0, 90, 60));
panetp = new TexturePaint(pane, new Rectangle(0, 0, 90, 60));
g2d.setPaint(slatetp);
g2d.fillRect(10, 15, 90, 60);
g2d.setPaint(javatp);
g2d.fillRect(130, 15, 90, 60);
g2d.setPaint(panetp);
g2d.fillRect(250, 15, 90, 60);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class TexturesEx extends JFrame {
public TexturesEx() {
initUI();
}
private void initUI() {
add(new Surface());
setTitle("Textures");
setSize(360, 120);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
TexturesEx ex = new TexturesEx();
ex.setVisible(true);
}
});
}
}
答案 4 :(得分:0)
如果你是在eclipse中这样做的话,有一些快速的说明,如果你将鼠标悬停在脚本中的一个类上,它将显示一个焦点对话框,其中显示f2为焦点。
对于计算机应用,请使用ImageIcon。而对于路径说,
ImageIcon thisImage = new ImageIcon("images/youpic.png");
指定文件夹(图像),然后用/分隔并添加pic文件的名称。
我希望这会有所帮助。如果其他人发布了它,我没有通读。所以...是的...思想强化。