Нажатие кнопки Отмена 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 тест перед тестированием, если пользователь ввел некоторые входные данные. Надеюсь, это помогло!