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つの別個のプログラムとして持っているためですか?どうすればこれを回避できますか?
showInputDialog(...)
のCancel Button
をクリックすると、常にnull値が取得され、条件が満たされないため、常に新しい接続が確立されます。したがって、この条件を次のように追加できます。
if(input == null || (input != null && ("".equals(input))))
{
throw new EmptyFieldsException();
}
キャンセルボタンを押しても、常にelse状態になります。確認してください、
else if(input == JOptionPane.CANCEL_OPTION){
System.out.println("Cancel is pressed");
}
最後のelseステートメントの前に上記のコードを明示的に追加し、そこで押されたキャンセルボタンを処理します。
私はこれと同じ問題を抱えていました、そして私はそれを次のように解決しました:
if(input != null){
if(!input.isEmpty()){
// Do whatever...
}
}
したがって、基本的に、ユーザーが何らかの入力を入力したかどうかをテストする前に、nullテストを移動しました。これがお役に立てば幸いです。