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