【问题标题】:Java App unexpected behavior when exported导出时 Java 应用程序的意外行为
【发布时间】:2025-11-30 12:00:02
【问题描述】:

我有一个非常奇怪的问题,我无法弄清楚,问题是我的应用程序在 IDE (Eclipse) 上完美运行,但在导出时却没有,当我运行 jar 时(双击)应用程序启动但是缺少某些功能(从模板文件加载,但是从普通文件加载时不会发生这种情况),当我尝试从控制台(java - jar my.jar)运行它以查看它打开的任何错误消息时我的应用程序工作得很好! :S ...

更多信息:

我的应用在 Windows 7 上运行

我启动任务管理器,我注意到当我使用双击它在名称 java.exe *32 下启动我的应用程序时,当我从命令行执行它时,它在名称 java.exe 下(没有“* 32"),据我所知,我没有编写任何与 32 位或 64 位功能相关的程序。

“已解决”

好吧,我无法按照我想要的方式解决它,据我所知,我发现我运行 x32 和 x64 的 2 个 java 版本之间存在问题,我删除了 32 位版本它开始作为一种魅力发挥作用,但我仍然不确定发生了什么,我感谢@Sajal Dutta 它的一个 cmets 帮助我理解部分问题,无论如何感谢你们所有人,我会继续搜索,直到找到问题...

【问题讨论】:

  • “缺少某些功能(从模板文件加载,但从普通文件加载时不会发生这种情况)”是什么意思?
  • 你看,我创建了一个文件,一个序列化文件,代表我的模板,另一个完全相同但变量,但是当我尝试加载模板时我的软件没有打开(序列化文件没有字段)但是当我尝试打开一个文件(包含所有字段)时它会这样做
  • 当“缺少某些功能”时,您会收到任何错误吗?如果是,请在您的问题中添加错误和产生错误的代码
  • 不,它只是“冻结”,详细地说,我选择了我要使用的模板,它开始加载(我在加载模板信息时处理了我所有的窗口)但它只是从不显示模板的信息(就像它继续阅读模板一样),奇怪的是当我在 IDE 中工作以及从控制台运行我的 jar 时它确实有效......
  • 我看不到任何错误,因为当我从控制台运行我的应用程序时,它可以工作,而当我不... 嗯,我没有任何控制台可以看到它 XD

标签: java jar


【解决方案1】:

当您从 Eclipse 创建 jar 时,您的资产不会被复制到 jar 或位置不会被保留。打开 jar 并检查您的模板是否在正确的位置,或者根本没有。

要让导出的 jar 包含您的资产/资源-

  1. 在 Eclipse 中右键单击您的项目。然后新建 -> 源文件夹。
  2. 将源文件夹命名为任意名称。例如模板源代码。
  3. 复制或拖动模板的整个目录到 template_src。然后制作罐子。

【讨论】:

  • 我明白你的意思,但我认为我没有以适当的方式表达自己,当我说模板是因为我的应用程序是基于文档的应用程序时,模板文件不应该被 jared
  • @Ordiel 双击可能是路径问题。你能把它试图加载模板的位置记录下来,而不是你要求它加载的位置..而不是它试图查看的位置。
  • 好的....但是...为什么它会在其他两种情况下(IDE,控制台)工作,双击运行时路径的行为和处理是否有任何区别?...
  • @Ordiel 这可能会有所帮助-*.com/questions/17603961/…
【解决方案2】:

由于它通过命令行工作,但在双击 jar 时不能工作,因此工作目录可能不同(并且您正在使用相对路径加载模板)。当您通过双击运行可执行 jar 时,在某些操作系统上,工作目录是主目录,而当您从命令行运行时,它是您当前所在的目录。

【讨论】:

    【解决方案3】:

    jar中的“文件”不是由File处理的,而是资源;

    URL url = getClass().getResource("...");
    InputStream in = getClass().getResourceAsStream("...");
    

    那么,jar 内或非 Windows 平台上的文件路径区分大小写

    "Template_A.xml"
    

    不是

    "template_a.xml"
    

    您也可以使用 7zip 或 WinZip 检查 jar。

    【讨论】:

      最近更新 更多