Нажатие на кнопку отмены showInputDialogue - PullRequest
8 голосов
/ 16 марта 2012

У меня вопрос по поводу нажатия кнопки отмены моего 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);

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

Ответы [ 3 ]

6 голосов
/ 16 марта 2012

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

if(input == null || (input != null && ("".equals(input))))   
{
    throw new EmptyFieldsException();
}
2 голосов
/ 16 марта 2012

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

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

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

0 голосов
/ 02 мая 2018

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

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

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

...