在 Mac 终端上使用命令行参数时发生 Java 服务器线程错误(Eclipse 文件)

标签 java eclipse multithreading

我正在尝试用 java 创建一个短信程序,如果命令行参数不包含 "-l",则该程序可以充当客户端;如果命令行参数包含 "-l",则可以充当服务器。

对于此错误,我正在研究服务器行为。

服务器的命令行参数类似于

java DirectMessengerServer -l 6004

错误截图: Terminal error screenshot

DirectMessageServer.java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class DirectMessengerServer {
    public static void main(String args[]) throws IOException {
        Thread Server = new Thread() {
            public void run() {
                int port = Integer.parseInt(args[0]);
                int port_number1 = Integer.valueOf(args[0]);
                ServerSocket server_socket = null;
                Socket client_socket;
                String message1;
                for (int i = 0; i < args.length; i++) {
                    if (args[i] == "-l") {
                        try {
                            System.out.println("Listening for connections..");
                            client_socket = server_socket.accept();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(client_socket.getInputStream(), "UTF8"));
                            PrintWriter output = new PrintWriter(client_socket.getOutputStream(), true);
                            String input_line = reader.readLine();
                            System.out.println("Received from client: ");
                            System.out.println(input_line);
                            output.println(input_line);
                        } catch (Exception e) {
                            System.out.println(e.getMessage());
                        }
                        //server.close();
                    }
                }
            }
        };
        Server.start();
    }
}

我的问题是如何解决该错误和/或当它显示 thread - 0 异常时它实际意味着什么和/或"numberformatexception" 在错误中意味着什么?

最佳答案

您正在尝试将 -l 解析为整数,这就是问题所在。

java DirectMessengerServer -l 6004

您的第一个参数是字符串类型,第二个参数是整数。

这正是屏幕截图错误所说的内容。

args[0] 表示 -l

args[1] 端口号

我不确定为什么你的参数有一个循环,但更正参数号可以解决你问题中的问题,也就是说你没有使用端口号变量,你的代码逻辑可以稍微改进。

关于在 Mac 终端上使用命令行参数时发生 Java 服务器线程错误(Eclipse 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43197585/

相关文章:

java - Spring Repository 删除规范

java - Eclipse JDT IJavaProject 获取根文件

java - 由于 Maven 依赖关系,Map、List 不是通用的且 isEmpty 函数未定义

java - 即使检查空值,也会出现 JsonMappingException

java - 如何检查字符串包含集合中的字符串之一

sql-server - VB.Net(或 C#)2008 多线程导入

java - 使用 Java 将字符串原子追加到 Windows 中的文件

c# - Parallel.For w 创建不同任务的 Action,c#

java - 线程 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 11 中的异常

c - 如何向 Eclipse 项目添加第二个源目录