【问题标题】:Determine the time the computer was turned ON using Java [duplicate]确定使用Java打开计算机的时间[重复]
【发布时间】:2015-07-28 14:35:37
【问题描述】:

我有一个在 Windows 启动时运行的 Java JAR 程序。它需要注册计算机的开机时间,所以它自然只是简单地获取了调用main方法的时间。工作正常。

但是,我们安装该程序的一些计算机非常(非常)慢。开机几分钟后程序可能会启动,这并不奇怪。

10-15 秒的误差是可以接受的(我们最新的计算机)。但最老的两三分钟就不是这样了。

是否有合理的方法来确定计算机的开机时间?使用 Java?

我确实意识到,对于这种工作,Java 是一个糟糕的选择。众所周知,Java 启动并不是特别快。无论如何我都会问这个,因为该程序已经用 Java 完成了 - 但如果没有解决方案,我将使用 C++ 版本。

窗户。

【问题讨论】:

标签: java startup


【解决方案1】:

several options在Windows上找到这个:

systeminfo | find /i "Boot Time"

(正如@Robert 所指出的,这仅适用于英文 Windows 安装)

wmic os get lastbootuptime

net statistics workstation

只需使用Runtime.getRuntime().exec("command"); 调用命令即可。

【讨论】:

  • systeminfo | find /i "Boot Time"仅适用于以英语为显示语言的 Windows 系统。我建议使用wmic os get lastbootuptime,因为它使用独立于语言和地区的格式作为输出格式。
【解决方案2】:

写短的 *.bat 文件怎么样,只有一个功能 - 启动后它将实际时间写入文件。

当你的Java程序被加载时,它只是首先尝试读取文件并找出计算机启动的时间。


也许更好的主意 - 通过 .bat 文件启动您的程序。首先获取实际时间并将其保存到变量中,然后以该变量的值作为参数启动程序。程序启动时,首先会在main方法中获取启动时间。

【讨论】:

  • 这主意不错!我会考虑的。
  • 实际上,这也不会为您提供确切的开始时间,只有 .bat 开始执行的时间。使用例如“systeminfo”命令会给你正确的时间,而且你不必处理文件系统权限等。
  • 这不是系统启动的时间。如果在开始时有很多批处理文件要执行,那么它会受到其他批处理的强烈影响。另外不保证这个时间会被操作系统的其他内部线程用来执行其他活动。
【解决方案3】:

您可以尝试从 Java 中(使用 Runtime.getRuntime().exec(...))启动一个命令,该命令将为您提供准确的机器启动时间 (systeminfo) 或正常运行时间(有一个 Microsoft 实用程序 uptime.exe)。

【讨论】:

  • 为什么这被否决了?
  • 打败了我——我认为这是对这个问题最准确的答案。你可以随时投票:)
【解决方案4】:

这不是 java 相关的问题。

这是一个操作系统相关的问题。

如果您的操作系统有一个函数可以为您提供此信息,您可以调用该函数

从java调用os函数的代码是

Runtime.getRuntime().exec("command");

在linux中获取上次开机信息的命令行命令如下:

last reboot | head -1

正如我所说,这取决于操作系统。

对于windows环境可以使用以下代码:

systeminfo | findstr /C:"System Boot Time"

【讨论】:

  • 这是一个 Java 问题,因为我想用 Java 来做。在 Java 中从操作系统调用此类函数的方式不一定与在另一种语言中调用它的方式相同。如果您不打算回答这个问题,请将此作为评论,而不是答案。
  • 我编辑了答案。我说这不是与 java 相关的问题,因为 java 没有关于系统何时启动的信息。它是操作系统的信息。如果您的问题是如何调用操作系统函数并检索结果,那么问题就暴露了
  • 调用这样的操作系统函数是一个的解决方案,但它可能是也可能不是only(或最好的)解决方案。询问如何调用 OS 函数而不是放下我的核心问题相当于假设这是最好的答案(可能是也可能不是),并且会丢弃任何其他可能的解决方案(例如 libik 的答案)可能是或多或少有用/方便。
  • 是的,正如我所说,最好放下核心问题来查看我拥有的所有选项。作为提问者,我不能在没有看到选项的情况下假设什么是最佳解决方案。
  • 我从来没有说过他的解决方案比调用操作系统函数更好。我说的是最好在之前查看选项选择答案。为此,我必须提出核心问题,而不是陷入假设。因此,我不能只问“我如何调用操作系统函数”,因为它会使可能(或可能不是)更好的替代答案无效。这与 libik 的答案无关 - 我将其作为一个例子来证明存在替代方法并且必须加以考虑,无论好坏
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
相关资源
最近更新 更多