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

try ブロックにないため、 Scanner オブジェクトを閉じていません。

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

含める必要があります

scanCommands.close();

これで例外がスローされる場合は、質問に含めてください。

于 2013-01-21T16:16:26.173 に答える