使用 Java 安装了 samba 驱动器,但驱动器标签未在文件资源管理器中更新?

问题描述 投票:0回答:1

我正在开发一个 Java GUI 应用程序,它可以卸载 Samba 共享并将其安装到特定的盘符驱动器。当用户选择时,驱动器已成功卸载和安装,但驱动器标签(驱动器的显示名称)未在 Windows 文件资源管理器中更新。

我使用

ProcessBuilder
来执行命令,当我自己使用 Windows CMD 时,我不会遇到此问题,但我运行的命令是相同的。

processBuilder = new ProcessBuilder( "net",
        "use",
        "T:",
        "\\\\" + SERVER_NAME + "\\" + SHARE_NAME + "\\" + FOLDER,
        "/USER:" + USERNAME,
        PASSWORD,
        "/PERSISTENT:NO"
        );

真正奇怪的是,当我“第一次”打开应用程序 GUI 中内置的文件浏览器时,它显示带有正确标签的驱动器,即使 Windows 文件资源管理器显示旧标签。这只是您第一次打开它时的情况,然后它不会显示任何新的驱动器标签。 我猜这更多是我正在处理的 Windows 特定问题,而不是代码问题。有什么想法可以强制窗口刷新标签或任何其他想法吗?

更新 - 我发现,如果我在任务管理器中重新启动

explorer.exe

进程,当我重新打开文件资源管理器时,它将刷新标签。我不想在我的应用程序中执行此操作,因为它会刷新整个 Windows 桌面界面,但它可能会提供一些见解。

更新 2 - 我还注意到,如果我在卸载初始驱动器和安装所选驱动器之间 

Thread.sleep()

5 秒,标签就会正确更新...这可以完成工作,但令人烦恼的是,这是我找到的最佳解决方案迄今为止。我目前正在计算需要让线程休眠的最短时间...1 秒不够长。

    

java windows samba
1个回答
0
投票

    模拟F5按键事件:
  1. 只需在Java中模拟F5按键事件即可。它应该针对文件资源管理器窗口。
示例代码:

import java.awt.Robot; import java.awt.event.KeyEvent; public class RefreshExplorer { public static void main(String[] args) { try { Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_F5); robot.keyRelease(KeyEvent.VK_F5); } catch (Exception e) { System.out.println(e); e.printStackTrace(); } } }

    使用循环优化 sleep 方法:
  1. 通过在 Java 中使用循环,每 500 毫秒检查一次工作是否完成,您不需要等待 5 秒,您可以通过以下方式找到最快的工作时间:尝试更短的时间。
  2. 在代码中,方法
isDriveLabelUpdated()

将是您需要编码的方法,用于检查驱动器标签是否已更新并返回布尔值。

示例代码:

for (int i = 0; i < 10; i++) { Thread.sleep(500); // Sleep for 500 milliseconds if (isDriveLabelUpdated()) { break; // Exit the loop if the update is detected } }

如果您需要第二个想法的帮助或有任何疑问,请随时提问。

© www.soinside.com 2019 - 2024. All rights reserved.