1

我有一个简单的问题,我正在制作一个在线游戏(在迁移到 GUI 之前先了解基础知识),并且我有一些命令,例如,如果用户在控制台中输入“q”,程序将终止(将相当),但是如果代码中的其他地方发生错误(即找不到服务器),我会关闭所有连接/尝试的连接。我也想关闭扫描仪对象,但扫描仪对象持有“.next()”方法。我尝试调用“.close()”和“.reset()”等,但没有什么能让扫描仪对象停止。如何停止扫描仪对象以便完全关闭程序?

-担

public void commands(){
    char[] charArray;
    while(running){
        String input = scanCommands.next();
        if(input.length() > 1){
            command = 'x';
        }else{
            charArray = input.toCharArray();
            command = charArray[0];
        }
        switch(command){
            case 'h':
                System.out.println("Server Commands: ");
                System.out.println("Command:     Function:");
                System.out.println(" q        -   to exit the server.");
                System.out.println("done.");
                break;
            case 'q':
                System.out.println("Quiting...");
                quite();
                System.out.println("done.");
                return;
            default:
                System.out.println("Invalid server command");
                break;
        }
    }
}

//the quite method is the one that I call and should close everything, including the 
//scanner object.

public void quite(){
    running = false;
    try{
        IS.close();
        OS.close();
        send.close();
        recieve.close();
    }catch(Exception e){
        IS = null;
        OS = null;
        send = null;
        recieve = null;
    }
    String[] nullNames = new String[7];
    name.setArray(nullNames);
}

更新:我曾经在相当方法中有“.close()”,但它没有用。我再次尝试并进入调试模式模式,它只是保持“.close()”。一旦我输入“q”或任何内容,代码就会继续,并执行“.close()”。如何在不输入任何内容的情况下关闭它?

4

2 回答 2

0

作为一种快速解决方法,您可以尝试在每次调用 next 方法之前检查 hasNext。

于 2013-12-16T07:47:02.077 回答
0

您没有关闭 Scanner 对象,因为它不在 try 块中。

try{
    IS.close();
    OS.close();
    send.close();
    recieve.close();
}

应包括

scanCommands.close();

如果这引发异常,请将其包含在您的问题中。

于 2013-01-21T16:16:26.173 回答