web-dev-qa-db-ja.com

キャンセルボタンをクリックします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);

そのため、キャンセルを押しても、クライアントソケット接続が確立された時点のコードがそのままです。これはおそらく、サーバーとクライアントを同じマシン上に2つの別個のプログラムとして持っているためですか?どうすればこれを回避できますか?

8
Arianule

showInputDialog(...)Cancel Buttonをクリックすると、常にnull値が取得され、条件が満たされないため、常に新しい接続が確立されます。したがって、この条件を次のように追加できます。

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

キャンセルボタンを押しても、常にelse状態になります。確認してください、

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

最後のelseステートメントの前に上記のコードを明示的に追加し、そこで押されたキャンセルボタンを処理します。

1
Rahul Borkar

私はこれと同じ問題を抱えていました、そして私はそれを次のように解決しました:

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

したがって、基本的に、ユーザーが何らかの入力を入力したかどうかをテストする前に、nullテストを移動しました。これがお役に立てば幸いです。

0
Ahmed Ktob