【问题标题】:JFrame popup not showing up in JARJFrame 弹出窗口未出现在 JAR 中
【发布时间】:2013-01-25 23:53:01
【问题描述】:

我有一个用 Java 构建的应用程序,当在应用程序中按下某个按钮时,另一个 jframe 应该会弹出一条消息。我制作的 ant 文件将可运行的 jar 放入我的 Eclipse 项目中的文件夹中。构建 jar 后,我在它所在的文件夹中运行 jar,它运行良好。我可以单击使弹出窗口出现的按钮,它确实出现了。

当我把罐子移到桌面上时,问题就来了。然后运行 ​​jar 启动应用程序,但按下按钮什么也不做(没有弹出窗口)。

现在,我知道我之前遇到了一些问题,包括一些图像资源,并且不得不使用 getResource() 等。我不明白为什么我必须做这样的事情,因为所有的“资源”都只是 .class 文件在构建路径中指定。我的意思是,应用程序应该做的就是创建一个 jframe...

编辑:添加 build.xml 编辑:精简 build.xml ——我认为问题在于 JAR 的构建。

<!--Creates the deployable jar file  -->
<target name="jar" depends="compile">
    <echo>"Making Deployable Jar..."</echo>
    <jar destfile="${shipping.dir}/POSsystem.jar" basedir="${build.dir}">

        <fileset dir="." includes="${imgs.dir}/**"/>
        <fileset dir="." includes="db/**"/>

        <manifest>
            <attribute name="Built-By" value="${user.name}"/>
            <attribute name="Main-Class" value="${main-class}" />
            <attribute name = "SplashScreen-Image" value="${splash-screen}" />
        </manifest>

    </jar>
    <echo>"Success Making Deployable Jar..."</echo>
</target>

编辑 3:添加了通过命令行运行的输出。

C:\Users\Matt\Desktop>java -jar POSsystem.jar
LOG COULD NOT BE CREATED!
java.io.IOException: The system cannot find the path specified
        at java.io.WinNTFileSystem.createFileExclusively(Native Method)
        at java.io.File.createNewFile(Unknown Source)
        at pos.log.GeneralLog.beginLog(Unknown Source)
        at pos.main.POSsystem.main(Unknown Source)

这是第一个错误。应用程序应在 JAR 中的日志文件夹中保留一个 log.txt。您可以在 build.xml(发布的第一件事)中看到我将要内置的日志文件夹添加到 JAR 中,这很好,但我的 log.java 代码中的路径显然会给我带来问题,因为它很难 -编码路径。所以我的问题是:如何在 JAR 文件中包含资源的路径。我知道要包含图像,我会执行以下操作: javax.swing.ImageIcon(getClass().getResource("/images/pos_header_icon.png")); 但我不确定如何访问文件位置...

【问题讨论】:

  • 1) 没有相关代码我不确定我们如何玩“猜错”游戏并获胜。 2) 你甚至不应该弹出 JFrames。这就是 JDialogs 的用途。
  • 感谢您的回复。我不打算让你玩“猜错”。我试图弄清楚这是否行不通的明确原因。在这种情况下,我认为发布代码对任何人都没有帮助。另外,您能否提供一个不使用 JFrame 作为弹出窗口的原因?在这种情况下,它是用户将要填写的表单。
  • 当然,JFrame 不依赖于底层窗口,这是不好的窗口行为。您很少希望启动两个单独的窗口应用程序,而是希望偶尔启动一个依赖于底层窗口的对话框窗口,这正是 JDialog 所做的。它还为您提供了模态或非模态的灵活性和强大功能,这是单独的 JFrame 无法做到的。
  • 是的,你有一个错误但没有相关代码,最好是sscce,我怀疑任何人都有机会帮助你。我当然希望我错了。
  • 1) 您的问题是什么? 2) 查看The Use of Multiple JFrames, Good/Bad Practice? 3) 从命令行运行它(例如java -jar the.jar)并报告任何输出。

标签: java swing ant


【解决方案1】:

应用程序应在 JAR 中的日志文件夹中保留一个log.txt

here 所述,可以从 JAR 中提取文件、修改文件并恢复存档;但是改变当前加载的类正在运行的 JAR 是不切实际的。对于正在进行的日志来说,这将是一个特殊的问题。相反,使用JFileChooser 请求合适的路径并将其保存在应用程序的java.util.Preferences 中。一些平台有推荐路径,example

【讨论】:

  • 谢谢垃圾神。我做了类似的事情;我刚刚在“user.home”下创建了一个目录,我将在其中存储日志数据和数据库内容等数据,而不是访问 JAR。我认为这几乎是您所推荐的,尽管我没有让用户选择位置。
  • 我会接受这个答案,因为我最初的问题与数据库、日志等的位置有关。
最近更新 更多