java - 当为 JComponent 使用本地文件时,有没有办法不对文件路径进行硬编码?

标签 java git

我想上传我的项目,一个纸牌游戏到Github,它有一张我硬盘上的图片作为游戏纸牌表。有没有一种方法可以编译/运行并上传它,而无需将整个文件路径硬编码到其中?截至目前,其:

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    JLabel panel = new JLabel(new ImageIcon("C:\\Users\\MyName\\Documents\\javaprojects\\Cardgame\\cardgameProject\\cardgameTableCanvas.jpg"));  
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}

如果这是由其他人从 Git 中提取的,我也不希望出现问题,并且我认为文件路径可以做到这一点。

最佳答案

这实际上取决于您的 java 代码所在的位置!有几种工具可以让您创建本地文件路径的 URL 对象,并且可以将这些工具输入到 ImageIcon 创建中!

如果图像与 java 代码位于同一目录(文件夹)中,则应执行以下操作以确保即使在其他计算机上也能引用该文件:

URL cardgameCanvas = new File("cardgameTableCanvas.jpg").toURI().toURL();
JLabel panel = new JLabel(new ImageIcon(cardgameCanvas));  

( For java 7+ : Paths.get("cardgameTableCanvas.jpg").toUri().toURL())

这应该允许您通过首先创建链接到图像的 URL 对象来引用该图像,并且 passing that URL object到新的 ImageIcon 对象!

希望这有帮助!

Additional Source

编辑

你也可以这样做

JLabel panel = new JLabel(new ImageIcon("cardgameTableCanvas.jpg"));

;)

编辑2

你的 main 看起来像这样(如果你想走“艰难的路”):

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    URL cardgameCanvas = new File("cardgameTableCanvas.jpg").toURI().toURL();
    JLabel panel = new JLabel(new ImageIcon(cardgameCanvas));   
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}

但是由于它适合您,我绝对建议像这样引用本地文档本身:

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    JLabel panel = new JLabel(new ImageIcon("cardgameTableCanvas.jpg")); 
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}

关于java - 当为 JComponent 使用本地文件时,有没有办法不对文件路径进行硬编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814594/

相关文章:

java - 一个Java模块可以导出一个包,该包的名称是另一个模块中包的子包吗?

java - 所有 JBoss 实例可用的通用数据源

java - Itext:在绝对位置显示段落

git - 使用 git pull 特定版本

git - 从 Windows Cmd 行 : Where are key files? 运行 git

Git:将现有存储库从 PC 移动到服务器,从服务器克隆

Java switch语句,查找数组

java - 不支持 ISO 3166 国家 ES?

git子模块 "--reference"参数

linux - 无法通过 git-bash 上的权限被拒绝(公钥)