我对Java应用程序编程比较陌生。我正在寻找一种在应用程序的“关于”对话框中嵌入应用程序的生成时间的方法。它不需要花哨的格式或任何特定的格式,但需要针对每个构建进行更改。对于C项目,我将使用DATE和TIME预处理程序宏。
我尝试过
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文件,并请求文件的最后修改时间。只是为了获得版本号需要进行很多工作,但是我知道发布后会收到支持请求,我真的很想确切地知道正在运行的代码。根据我的经验,通常在代码修复/更新期间会忘记手动修改的版本号。
[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
您需要做的是将该信息作为常量存储在程序中,或者作为数据存储在外部普通文件中。