Java代码生成的.scene文件在Eclipse中不显示,导出可运行jar失败如何解决
问题解决指南
核心误区澄清
你无法通过编程方式动态将文件加入构建路径,构建路径是项目编译、打包阶段的静态配置,运行阶段修改无效。
问题1:Eclipse不识别、不打包.scene文件的解决方法
Eclipse默认仅会将识别为资源的文件从src目录拷贝到编译输出目录、并在导出jar时打包,你需要手动添加后缀支持:
- 右键你的项目 -> 选择「Properties」
- 左侧菜单选择「Java Build Path」,切换到「Source」标签
- 找到你存放.scene文件的源文件夹,点击左侧箭头展开,选中「Included」,点击右侧「Edit」
- 在「Inclusion patterns」里点击「Add」,输入
**/*.scene,保存所有配置即可
配置完成后刷新项目,Eclipse就会显示src下的.scene文件,打包时也会自动将其纳入jar包。
问题2:资源读写逻辑的错误修正
你当前的代码逻辑存在本质问题:
getClass().getResource()读取的是类路径下的静态资源,也就是编译时已经存在、打包时被打进jar包的文件,jar包本身是只读的,运行时无法往jar包内写入新文件- 你当前的写入逻辑直接写文件系统路径,运行时生成的.scene文件不可能被动态打进jar包,自然无法用getResource读取
分场景修正方案
根据使用场景拆分读写逻辑:
- 编辑器开发阶段生成场景:
不要将生成的.scene文件直接写入src目录,单独指定一个项目内的「资源输出目录」(比如和src同级的assets目录),将assets也配置为项目的源文件夹(同样按上述步骤添加*.scene的包含规则),每次生成新场景后手动刷新项目即可同步到构建路径。 - 运行时读取场景:
- 读内置预制场景:用
getResource()读取类路径下提前打包好的.scene文件 - 读用户自定义/修改的场景:直接用文件IO读取文件系统路径的文件,不要用getResource
代码优化建议
你当前的流操作没有做自动关闭处理,容易出现资源泄漏,建议改用try-with-resources语法,示例如下:
写入场景代码优化
public File createSceneFile(String path) { File file = new File(path); if (!file.exists()) { try (FileOutputStream fileStream = new FileOutputStream(file); ObjectOutputStream os = new ObjectOutputStream(fileStream)) { if(file.createNewFile()) { os.writeObject(scene); } return file; } catch(IOException e) { e.printStackTrace(); return null; } } return file; } public File updateScene(String path) { try (FileOutputStream fileStream = new FileOutputStream(path); ObjectOutputStream os = new ObjectOutputStream(fileStream)) { os.writeObject(scene); return new File(path); } catch(IOException e) { e.printStackTrace(); return null; } }
读取场景代码优化
public Scene getScene(URL url) { try (InputStream inStream = url.openStream(); ObjectInputStream ois = new ObjectInputStream(inStream)) { Scene s = (Scene)ois.readObject(); s.instantiation = this; return s; } catch(IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } }
内容的提问来源于stack exchange,提问作者taym
相关产品推荐
相关产品推荐

