Обработка кнопки отмены Java в двух JOptionPane showInputDialog

Во-первых, я извиняюсь, возможно, название неправильное. Я объясню свою проблему. У меня есть одна joptionpane с компонентом showinputdialog для ввода адреса сервера. Я хочу, чтобы после нажатия кнопки «Отмена» он вернулся в главное окно. Но в моем случае это вместо второго joptionpane.

Мой английский плохой :) ... Кто-нибудь может мне помочь?

это мой код

    private static int setPortNumber()
{
    String portNumber = JOptionPane.showInputDialog(frame,
            "Enter the Port number for server creation","Server Connection\n",
            JOptionPane.OK_CANCEL_OPTION);
    int PORT = Integer.parseInt(portNumber);

    return PORT;

}   

private static String setServerName()
{   
    server_address = JOptionPane.showInputDialog(frame,
            "Enter Server Address or PC-Name.", "Server Connection",
            JOptionPane.OK_CANCEL_OPTION);
    return server_address;

}

private void networking() {
    server_address = setServerName();
        try {

            PORT = setPortNumber();
            if (server_address != null) {

                sock = new Socket(InetAddress.getByName(server_address) ,
                        PORT);
            } 
            else {
                SocketException sc = new SocketException();
                throw sc;
            }


        // Recieving input and output streams
        InputStreamReader ir = new InputStreamReader(sock.getInputStream());
        br = new BufferedReader(ir);
        pw = new PrintWriter(sock.getOutputStream());
        login.setEnabled(true);
        incoming.append("Connected to Server.please login.\n");
        connect.setEnabled(false);
        pw.println("~##~");
        pw.flush();
        login.requestFocus();
    }

person vallen    schedule 03.01.2014    source источник
comment
setServerNumber() и setPortNumber() оба открывают JOptionPane, а методы to вызываются один за другим в вашем методе netWorking(). Может быть, вы должны изменить это   -  person Paul Samsotha    schedule 03.01.2014
comment
Извините, что мне изменить? Мне пришлось вызывать его один за другим, если я нажму «ОК». Но кнопка отмены все равно вызывает другую.   -  person vallen    schedule 03.01.2014


Ответы (2)


Запустите этот пример. Он отлично работает

import javax.swing.JOptionPane;


public class NetWorking {

    public static String server_address;
    public static void main(String[] args) {
        networking();

    }

       private static int setPortNumber()
       {
           String portNumber = JOptionPane.showInputDialog(null,
                   "Enter the Port number for server creation","Server Connection\n",
                   JOptionPane.OK_CANCEL_OPTION);
           int PORT = Integer.parseInt(portNumber);

           return PORT;

       }   

       private static void setServerName()
       {   
           server_address = JOptionPane.showInputDialog(null,
                   "Enter Server Address or PC-Name.", "Server Connection",
                   JOptionPane.OK_CANCEL_OPTION);

       }

       private static void networking(){
           setServerName();
           if (server_address == null) {
               return;
           } 
            Integer  port = setPortNumber();
            if (port != null) {
                System.out.println(port);
            }
       }

}
person Paul Samsotha    schedule 03.01.2014

person    schedule
comment
@ user3124989 Пусть метод возвращает boolean, а в if возвращает false, а в нижней части метода возвращает true - person Paul Samsotha; 03.01.2014
comment
@user3124989 или просто return; - person Paul Samsotha; 03.01.2014
comment
@peeskillet, я пробовал это .. и если я нажму «Отмена», он вернется в главное окно. но после нажатия «ОК» он также возвращается в главное окно. - person vallen; 03.01.2014
comment
@user3124989 user3124989, если вам нужно выполнить все остальное, кроме setPortNumber();, то если использовать if( .. != null ..) { setPortNumber(); }. У вас есть варианты. - person Paul Samsotha; 03.01.2014
comment
@user3124989 user3124989, поскольку server_address уже является членом класса, попробуйте заставить setServerName() вернуть void, а затем просто вызвать setServerName() вместо server_name = setServerName(); - person Paul Samsotha; 03.01.2014
comment
@peeskillet Охм... извините, сэр, это моя вина. Это работает с вашим первым комментарием здесь. Я нажимаю «ОК» в пустом диалоговом окне ввода. Спасибо, сэр. - person vallen; 03.01.2014