Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的NetBeans java应用程序如何显示它的构建时间?_Java_Netbeans_Versioning - Fatal编程技术网

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

我的NetBeans java应用程序如何显示它的构建时间?,java,netbeans,versioning,Java,Netbeans,Versioning,我对Java应用程序编程比较陌生。我正在寻找一种方法,将应用程序的构建时间嵌入到应用程序的“关于”对话框中。它不需要花哨或任何特定的格式,但需要为每个构建进行更改。对于C项目,我将使用日期和时间预处理器宏 我试过了 private void helpAboutMenuActionPerformed(java.awt.event.ActionEvent evt) { // TODO

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

我试过了

    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();
然后我选择了“Clean and Build”并运行.jar文件。显示的时间是我运行.jar文件的时间;当我关闭应用程序并在几分钟后运行时,显示的时间不同。由于我刚刚运行了.jar文件,我的想法是时间应该是一样的

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

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

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

更新:更改为使用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);
从jar文件运行时的输出

文件“Test.class”于2020-04-14T01:52:34Z修改

您能发布实际代码吗?我从NetBeans收到错误-找不到方法getLastModifiedTime()的符号。@StevenGrunza这是实际代码。在Java 8和Java 14上测试。@StevenGrunza如果使用Java 7,请使用
FileTime.from(connection.getJarEntry().getTime(),TimeUnit.ms)
而不是
connection.getJarEntry().getLastModifiedTime()
作为一名新的Java程序员,为什么要用9年前的Java 7编写代码,使用6.5年前的NetBeans版本?