【问题标题】:How can my NetBeans java app display the time it was built? [duplicate]我的 NetBeans java 应用程序如何显示它的构建时间? [复制]
【发布时间】:2020-07-26 16:14:18
【问题描述】:

我对 Java 应用程序编程比较陌生。我正在寻找一种将应用程序的构建时间嵌入到应用程序的“关于”对话框中的方法。它不需要花哨或任何特定格式,但确实需要针对每个构建进行更改。对于 C 项目,我会使用 DATETIME 预处理器宏。

我试过了

    private void helpAboutMenuActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:

        // Trying to launch an About dialog
        versionString = versionString.format( "Compiled on %s", compileTime );

        System.out.println( "Version Info is: " + versionString );
        System.out.println( "this.revision is: " + this.compileTime);

        helpAboutDialog.showMessageDialog( helpAboutDialog, 
                versionString + "\r\n" + this.compileTime,  // Message info
                "Version Info",
                helpAboutDialog.INFORMATION_MESSAGE );


    } 

compileTime 的定义位置

    public class mainWindow extends javax.swing.JFrame {

    /**
     * Creates new form mainWindow
     */
        public final Date  compileTime = new Date();

然后我选择“清理并构建”并运行 .jar 文件。显示的时间是我运行 .jar 文件的时间;当我关闭应用程序并在几分钟后运行它时,显示的时间不同。因为我刚刚运行了 .jar 文件,所以我的想法是时间应该是一样的。

我的构建环境是 Netbeans 7.4 和内置的 GUI 构建器(我不知道它的正确名称)。

有什么建议吗?如有必要,我可以尝试构建一个完整的应用程序来显示问题(我的实际源文件有 800 多行并且还在增长——其中大部分与这个问题/问题无关)。

我的下一个想法是尝试在文件系统中找到 .jar 文件并请求文件的最后修改时间。只是为了获得一个版本号需要经历很多事情,但我知道我会在发布后获得支持请求,我真的很想知道到底运行了什么代码。根据我的经验,手动修改的版本号通常会在代码修复/更新期间被遗忘。

【问题讨论】:

  • 作为一个 Java 程序员,您为什么要使用 6.5 年前的 NetBeans 版本在 9 年前的 Java 7 中编写代码?

标签: java netbeans versioning


【解决方案1】:

更新: 更改为使用 jar 文件 Xxx.class 条目时间戳,而不是 jar 文件自己的时间戳,因为 jar 文件的最后修改日期可能会在以下时间更新部署。

您可以使用以下代码获取.class文件的文件修改时间,如果直接运行则从文件系统获取,如果打包则从jar文件入口获取。

Class<?> myClass = Test.class; // or getClass() if in non-static method
String classFileName = myClass.getSimpleName() + ".class";
URL classUrl = myClass.getResource(classFileName);
FileTime modifiedTime;
if (classUrl != null && "file".equals(classUrl.getProtocol())) {
    modifiedTime = Files.getLastModifiedTime(Paths.get(classUrl.toURI()));
} else if (classUrl != null && "jar".equals(classUrl.getProtocol())) {
    JarURLConnection connection = (JarURLConnection) classUrl.openConnection();
    modifiedTime = connection.getJarEntry().getLastModifiedTime();
} else {
    throw new IllegalStateException("Unable to determine build time for '" + classFileName + "'");
}
System.out.println("File '" + classFileName + "' was modified on " + modifiedTime);

直接运行时的输出,例如来自 NetBeans

File 'Test.class' was modified on 2020-04-14T01:52:35.2654475Z

从 jar 文件运行时的输出

File 'Test.class' was modified on 2020-04-14T01:52:34Z

【讨论】:

  • 你能发布实际代码吗?我从 NetBeans 收到错误 - 找不到方法 getLastModifiedTime() 的符号。
  • @StevenGrunza 那是实际代码。在 Java 8 和 Java 14 上测试。
  • @StevenGrunza 如果使用 Java 7,请使用 FileTime.from(connection.getJarEntry().getTime(), TimeUnit.MILLISECONDS); 而不是 connection.getJarEntry().getLastModifiedTime()
猜你喜欢
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多