【问题标题】:Handle java cancel button in two JOptionPane showInputDialog在两个 JOptionPane showInputDialog 中处理 java 取消按钮
【发布时间】:2014-01-21 00:51:10
【问题描述】:

首先,很抱歉,标题可能是错误的。我会解释我的问题。我有一个带有 showinputdialog 组件的 joptionpane 来输入服务器地址。我想在单击取消按钮后,它将返回主窗口。但就我而言,它改为第二个 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();
    }

【问题讨论】:

  • setServerNumber()setPortNumber() 都打开一个 JOptionPane 并且那些方法在你的 netWorking() 方法中被一个接一个地调用。也许你应该改变它
  • 对不起,我应该改变什么?如果我单击确定,我确实必须一一调用它。但是取消按钮仍然调用另一个。

标签: java swing sockets joptionpane cancel-button


【解决方案1】:
private void networking() {
    server_address = setServerName();
    if(server_address == null || server_address.equals("")){
        //Handle what happens when the server name is empty (or the user clicked the cancel button. If you let the execution continue, then the try/catch block below will pop up the second jInputDialog
    }
        try {

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

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

【讨论】:

  • @user3124989 让方法返回boolean,在if 中返回false,在方法底部返回true
  • @user3124989 或只是return;
  • @peeskillet 我试过了.. 如果我点击取消,它会返回主窗口。但点击确定后,它也会返回主窗口。
  • @user3124989 如果您需要执行除setPortNumber(); 之外的所有其他操作,那么如果使用if( .. != null ..) { setPortNumber(); }。你有选择。
  • @user3124989 因为server_address 已经是类成员,请尝试让setServerName() 返回void,然后只需调用setServerName() 而不是server_name = setServerName();
【解决方案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);
            }
       }

}

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2012-07-14
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多