我在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之前,我不认为它曾经这样做过!有什么想法可能会这样做吗?
答案 0 :(得分:0)
您正在收到这些邮件,因为您正在运行CMD.exe 不同于%COMSPEC%环境中定义的文件夹 变量
如果要打开特定文件夹的命令提示符 您可以右键单击并选择“在此处打开命令窗口”(内置于 Vista和7)。这是额外的光滑,因为如果你在网络共享上这样做 Windows将自动为您映射驱动器号。 右键单击计算机上的文件夹C:\ windows \ system32 按住shift键。您将看到一个额外的上下文相关菜单 item那里:打开命令提示符。只需点击此菜单即可 命令窗口将打开,当前工作目录设置为 文件夹的实际位置。
另一种选择是制作新的CMD快捷方式。
创建一个新的快捷方式,输入%COMSPEC%作为目标,并给予 这是你想要的名字。创建完成后,编辑快捷方式并进行更改 “开始”路径,指向您希望打开命令提示符的位置。