我的NetBeans Java应用程序如何显示其构建时间?

问题描述 投票:1回答:2

我对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 netbeans versioning
2个回答
1
投票

[UPDATED:更改为使用jar文件Xxx.class条目时间戳,而不是jar文件自己的时间戳,因为部署时可能会更新jar文件的上次修改日期。

您可以使用以下代码从文件系统直接运行,或者从jar文件条目(如果打包的话)获取.class文件的文件修改时间。

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

-1
投票

您需要做的是将该信息作为常量存储在程序中,或者作为数据存储在外部普通文件中。

© www.soinside.com 2019 - 2024. All rights reserved.