0

我有一个设计为在可移动驱动器上运行的 Java 应用程序。我想添加一个按钮,以允许用户安全地移除作为USB Disk Ejector运行程序的驱动器允许的情况下安全地移除程序运行的驱动器。但是,我不确定如何实现这一点(代码方面),因为如果程序正在从驱动器运行,则无法弹出驱动器。我知道这个程序是开源的,但我不知道在哪里可以找到我正在寻找的代码,而且它不是用我学过的语言编写的。

因此,如果有人能帮助我弄清楚如何在我的 Java 应用程序中实现此功能,我将不胜感激。显然我不想只是复制,但我现在唯一知道的是我必须将控制权交给某种不在我希望弹出的驱动器上的临时脚本。

提前致谢

4

2 回答 2

0

你是对的,你需要从另一个驱动器运行应用程序。我会遵循Java Web Start CD 安装指南,该指南对于 USB 驱动器或任何其他媒体的工作应该与对 CD 的工作一样好。

您需要使您的应用程序成为 Java Web Start 应用程序。它实际上比听起来容易得多。您的 .jar 不需要更改,您只需创建一个扩展名为 .jnlp 的小型 XML 文件并将其放在 .jar 文件旁边。有关 Java Web Start 和 JNLP 文件的信息可以在教程和该页面底部的链接中找到。

执行安全删除的外部可执行文件可以包含在您的应用程序 .jar 文件中。您可以将其从 .jar 复制到临时文件以运行它:

Path safeRemovalProgram = Files.createTempFile(null, ".exe");
try (InputStream stream =
        MyApp.class.getResourceAsStream("saferemoval.exe")) {
    Files.copy(stream, safeRemovalProgram,
        StandardCopyOption.REPLACE_EXISTING);
}
safeRemovalProgram.toFile().setExecutable(true);

ProcessBuilder builder =
    new ProcessBuilder(safeRemovalProgram.toString());
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
Process safeRemovalProcess = builder.start();
于 2013-10-12T21:45:52.133 回答
0

据我所知,不可能在纯 Java 中实现这一点,因为诸如弹出/卸载驱动器之类的操作是特定于操作系统的,并且不包含在通常只支持最低公分母的默认 Java 库中。您需要通过执行脚本/批处理文件或运行使用Java 的JNI 机制用C 编写的本机代码来执行一些特定于平台的代码。

于 2013-10-12T19:57:47.827 回答