0
if (!(portField.getText().equals(""))) {                
    String p = portField.getText();
    CharSequence numbers = "0123456789";

    if (p.contains(numbers)) {

        listener = new ServerSocket(Integer.parseInt(p));

        while (true) {
            Socket socket = listener.accept();
            try {
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                out.println("Hi there, human.");    
            } finally {
                socket.close(); 
            }
    }} else {
        JOptionPane.showMessageDialog(null, "Only numbers are allowed.");
    }
} else {
    JOptionPane.showMessageDialog(null, "Please input a port.");
}

問題はJOptionPaneportField. CharSequence私が知る限り、数値のみを入力できるようにテストした方法は正しく、Java はブロック全体を無視して句にジャンプしますelse

なぜこうなった?else使用せず、else if代わりに使用する必要がありますか?

4

1 に答える 1

8

containsは全体を含むことを意味します0123456789。例えば:"a0123456789b"

p.matches("[0-9]*");代わりに使用してください。

于 2013-06-30T00:50:04.010 に答える