java shutdown hook“系统找不到消息文本”

时间:2013-11-29 03:26:28

标签: java shutdown-hook

我在Server类的main方法中有以下关闭钩子:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        if (open) {
            open = false;

            //log out all players
            System.out.println("Logging out all players...");
            Iterator playerIterator = playerList.values().iterator();
            while (playerIterator.hasNext()) {
                Player p = (Player) playerIterator.next();
                playerIterator.remove();
                p.logout("The server has been shut down.");
            }

            //save the World
            System.out.println("Saving world...");
            try {
                String worldFile = Server.path.concat("/worlds/"+worldName);
                ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(worldFile));
                out.writeObject(world);
            } catch (FileNotFoundException fe) {
                System.out.println("World \"" + worldName + "\" couldn't be saved properly - world file not found.");
                fe.printStackTrace();
            } catch (IOException ioe) {
                System.out.println("I/O error while attempting to save world \"" + worldName + "\".");
                ioe.printStackTrace();
            }

            //close Server socket
            try {
                serverSocket.close();
                System.out.println(worldName + " is now closed.");
            } catch (IOException ioe) {
                System.out.println("Failed to close ServerSocket.");
                ioe.printStackTrace();
            }
        }
    }
});

当我停止服务器时(通过按Ctrl + c),关闭挂钩执行它应该做的所有事情(它工作正常),但是我得到以下消息,服务器将无法完成关闭(我必须再按一次Ctrl + c):

  

系统找不到消息号为0x237b的消息文本   应用程序的消息文件。

在我更新到Java 7之前,我不认为它曾经这样做过!有什么想法可能会这样做吗?

1 个答案:

答案 0 :(得分:0)

http://social.technet.microsoft.com/Forums/windows/en-US/2d506b96-e856-4752-90af-4f8194bb0040/windows-7-command-prompt-message-errors-cmdexe?forum=w7itprogeneral

找到答案
  

您正在收到这些邮件,因为您正在运行CMD.exe   不同于%COMSPEC%环境中定义的文件夹   变量

     

如果要打开特定文件夹的命令提示符   您可以右键单击并选择“在此处打开命令窗口”(内置于   Vista和7)。这是额外的光滑,因为如果你在网络共享上这样做   Windows将自动为您映射驱动器号。   右键单击计算机上的文件夹C:\ windows \ system32   按住shift键。您将看到一个额外的上下文相关菜单   item那里:打开命令提示符。只需点击此菜单即可   命令窗口将打开,当前工作目录设置为   文件夹的实际位置。

     

另一种选择是制作新的CMD快捷方式。

     

创建一个新的快捷方式,输入%COMSPEC%作为目标,并给予   这是你想要的名字。创建完成后,编辑快捷方式并进行更改   “开始”路径,指向您希望打开命令提示符的位置。