swing插入图片很麻烦的样子,请帮我看看代码。

SilentHunter460 2020-05-05 12:57:37
以下代码花了我很多时间仔细核对API,该用的方法,该提供的参数类型,该使用异常捕获都做齐了,运行出一大堆错误。
那个jpg文件是肯定有的。


import java.awt.*;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class GameWindow extends JFrame {


public GameWindow() {
setSize(Settings.win_width, Settings.win_height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(400, 100);
setVisible(true);
}

@Override
public void paint(Graphics g) {
BufferedImage bg = null;
try {
bg =ImageIO.read(new File("images/bg.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(bg, 0, 0, null);
}

public static void main(String[] args) {
new GameWindow();
}
}
...全文
568 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-05-06
  • 打赏
  • 举报
回复
eclipse默认路径是项目路径,你把文件夹设置在src下,试试src/images/bg.jpg
qq_39936465 2020-05-06
  • 打赏
  • 举报
回复
引用 10 楼 qq_16774199 的回复:
你好谢谢回复。目前还是初学阶段,目标是能让自己的代码跑起来。发布到服务器不是我目前考虑的。 以前学习javafx,放src目录用相对路径可以读取到图片,而swing就不能。
我试过可以的,在src下新建一个resource folder ,看你的截图可能是文件夹的问题。
qybao 2020-05-06
  • 打赏
  • 举报
回复
不知道你的javafx的运行环境是怎样的,但是不管什么情况,相对路径的找法原理都差不多的。 可以参考以下文章 https://www.jianshu.com/p/8b7bab15ccc6 也就是把资源路径放到了classpath里,其实就是为了让classloader能找到该路径(classloader只会加载classpath的资源,除非自定义classloader加载外部其他路径的资源)。正如我上面说的,只有找到了某个已知的类路径,才能相对于它来定位其他的相对路径。
SilentHunter460 2020-05-06
  • 打赏
  • 举报
回复
引用 9 楼 qybao 的回复:
你要用相对路径,就要有一个程序运行起来能找到的已知路径,然后才能相对于这个已知路径来确定你的相对路径。 你的程序运行起来后是不知道src路径的(除非你用绝对路径),你想,程序最终发布到服务器都是class或jar,谁会关心你这个src路径(而且每个项目的src路径不一样,没有可取性)。 所以一般从classloader找到加载的类路径,再相对于这个类路径来找你的相对路径。 bg=ImageIO.read(this.getClass().getResourceAsStream(“../images/bg.jpg”)); //类的当前路径是xx/太阳系/GameWindown.class,图片相对于这个路径是什么你就自己推算吧。 获取资源的路径方法还有很多, 比如可以用配置文件来指定路径(写个property文件或yalm之类的,还可以用启动参数指定系统property(java -Dxxx=path yourclass 启动,程序中通过System.getProperty(“xxx”)来取得路径。
你好谢谢回复。目前还是初学阶段,目标是能让自己的代码跑起来。发布到服务器不是我目前考虑的。 以前学习javafx,放src目录用相对路径可以读取到图片,而swing就不能。
AntiCSD 2020-05-06
  • 打赏
  • 举报
回复
1. setSize(800, 600);
2. jdk13
3.
SilentHunter460 2020-05-05
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
你的 代码稍微调整了下,本地跑了没问题: setSize(500, 600);\\ Settings不知道是啥,就写固定值了 bg =ImageIO.read(new File("E:\\java\\test\\imges\\timg.jpg")); \\ 这里写了绝对路径。如果是相对路径,你的图片要放到编译目录下
绝对路径可以用,但是相对路径没办法,已经新建一个包放在同一个src目录下。 你试试相对路径是否可以?
oh_Maxy 2020-05-05
  • 打赏
  • 举报
回复
你的 代码稍微调整了下,本地跑了没问题:
setSize(500, 600);\\ Settings不知道是啥,就写固定值了

bg =ImageIO.read(new File("E:\\java\\test\\imges\\timg.jpg")); \\ 这里写了绝对路径。如果是相对路径,你的图片要放到编译目录下
qybao 2020-05-05
  • 打赏
  • 举报
回复
你要用相对路径,就要有一个程序运行起来能找到的已知路径,然后才能相对于这个已知路径来确定你的相对路径。 你的程序运行起来后是不知道src路径的(除非你用绝对路径),你想,程序最终发布到服务器都是class或jar,谁会关心你这个src路径(而且每个项目的src路径不一样,没有可取性)。 所以一般从classloader找到加载的类路径,再相对于这个类路径来找你的相对路径。 bg=ImageIO.read(this.getClass().getResourceAsStream(“../images/bg.jpg”)); //类的当前路径是xx/太阳系/GameWindown.class,图片相对于这个路径是什么你就自己推算吧。 获取资源的路径方法还有很多, 比如可以用配置文件来指定路径(写个property文件或yalm之类的,还可以用启动参数指定系统property(java -Dxxx=path yourclass 启动,程序中通过System.getProperty(“xxx”)来取得路径。
SilentHunter460 2020-05-05
  • 打赏
  • 举报
回复
引用 7 楼 oh_Maxy 的回复:
bg =ImageIO.read(new File(path)); 按我给的方式试一下。
谢谢,你的方式可以正常看到图片。 但是我不明白,在src里建了包,放进去的图片,不能相对引用?
oh_Maxy 2020-05-05
  • 打赏
  • 举报
回复
bg =ImageIO.read(new File(path));
按我给的方式试一下。
oh_Maxy 2020-05-05
  • 打赏
  • 举报
回复
引用 5 楼 qq_16774199 的回复:
[quote=引用 3 楼 oh_Maxy 的回复:]
       String path = GameWindow.class.getResource("/")+"images/bg.jpg";
path = path.substring(path.indexOf("/")+1);
System.out.println(path);
bg =ImageIO.read(new File(path));


你把bg = ImageIO 那行调整我这样试试。看看打印的路径是不是在你编译后的classes路径下。


打印的路径是: F:/eclipse-workspace/test/bin/images/bg.jpg,
但是我的文件放在这里:F:/eclipse-workspace/test/src/images/bg.jpg[/quote]
编译后的类路径就是bin,你去这个目录下看看,有没有生成一个图片。
SilentHunter460 2020-05-05
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
       String path = GameWindow.class.getResource("/")+"images/bg.jpg";
            path = path.substring(path.indexOf("/")+1);
            System.out.println(path);
            bg =ImageIO.read(new File(path));
你把bg = ImageIO 那行调整我这样试试。看看打印的路径是不是在你编译后的classes路径下。
打印的路径是: F:/eclipse-workspace/test/bin/images/bg.jpg, 但是我的文件放在这里:F:/eclipse-workspace/test/src/images/bg.jpg
SilentHunter460 2020-05-05
  • 打赏
  • 举报
回复
引用 3 楼 oh_Maxy 的回复:
       String path = GameWindow.class.getResource("/")+"images/bg.jpg";
            path = path.substring(path.indexOf("/")+1);
            System.out.println(path);
            bg =ImageIO.read(new File(path));
你把bg = ImageIO 那行调整我这样试试。看看打印的路径是不是在你编译后的classes路径下。
打印的路径是:F:/eclipse-workspace/test/bin/images/bg.jpg
oh_Maxy 2020-05-05
  • 打赏
  • 举报
回复
       String path = GameWindow.class.getResource("/")+"images/bg.jpg";
path = path.substring(path.indexOf("/")+1);
System.out.println(path);
bg =ImageIO.read(new File(path));


你把bg = ImageIO 那行调整我这样试试。看看打印的路径是不是在你编译后的classes路径下。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧