Нажатие кнопки Отмена showInputDialogue

У меня есть вопрос в отношении нажатия кнопки отмены моего inputDialoguebox. Я задал аналогичный вопрос раньше, поэтому прошу прощения, если я, кажется, повторяюсь.

основная проблема заключается в том, что мой код выполняется независимо от нажатия кнопки Отмена, и соединение сокета выполняется, даже если я не добавляю никаких входных данных.

почему это происходит и как я могу избежать этого?

String input = "";
           try
           {
               InetAddress host = InetAddress.getLocalHost();
               String hostAddress = host.getHostAddress();

               //setting label to host number so as to know what number to use
               labHostName.setText("(" + hostAddress + ")");

               input = JOptionPane.showInputDialog(null,"Please enter host name to access server(dotted number only)...see number on frame", "name", JOptionPane.INFORMATION_MESSAGE); 

               if(input != null && "".equals(input))//input != null && input.equals(""))   
               {
                   throw new EmptyFieldsException();



               }
               else if(input != null && !input.equals(hostAddress))
               {
                   throw new HostAddressException();


               }

               else
               {

                    clientSocket = new Socket(input, 7777);

таким образом, с кодом, как это на данный момент соединение clientsocket выполняется, даже если я нажимаю кнопку Отмена. Возможно, причина в том, что у меня есть сервер и клиент как две отдельные программы на одной машине? Как я могу этого избежать?

3 ответов


при нажатии на кнопку Cancel Button на showInputDialog(...), вы всегда получаете нулевое значение, для которого условие не выполняется, поэтому всегда устанавливается новое соединение. Таким образом, вы можете добавить это условие следующим образом :

if(input == null || (input != null && ("".equals(input))))   
{
    throw new EmptyFieldsException();
}

Он всегда будет идти в другом состоянии, даже если кнопка отмены нажата. Проверьте,

else if(input == JOptionPane.CANCEL_OPTION){
   System.out.println("Cancel is pressed");
}

добавить выше код перед последним оператором else явно и обрабатывать кнопку отмены нажатой там.


У меня была эта же проблема, и я решил ее следующим образом:

if(input != null){
    if(!input.isEmpty()){
     // Do whatever...
    }
}

Итак, я в основном переместил null тест перед тестированием, если пользователь ввел некоторые входные данные. Надеюсь, это помогло!