Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程程序在for循环之前退出(程序的服务器端)(Eclipse使用Mac终端/命令行参数)_Java_Eclipse_Cmd - Fatal编程技术网

Java线程程序在for循环之前退出(程序的服务器端)(Eclipse使用Mac终端/命令行参数)

Java线程程序在for循环之前退出(程序的服务器端)(Eclipse使用Mac终端/命令行参数),java,eclipse,cmd,Java,Eclipse,Cmd,我正在尝试创建一个程序来发送和接收文本消息(UTF-8字符串) 对于这个错误,我正在服务器端工作 服务器的命令行参数类似于 java DirectMessengerServer -l 6021 这个屏幕截图的问题是“Try block begins”没有打印出来(这是代码后面被忽略的行) DirectMessenger Server.java的代码: import java.io.*; import java.net.*; import java.util.*; import static

我正在尝试创建一个程序来发送和接收文本消息(UTF-8字符串)

对于这个错误,我正在服务器端工作

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

java DirectMessengerServer -l 6021

这个屏幕截图的问题是“Try block begins”没有打印出来(这是代码后面被忽略的行)

DirectMessenger Server.java的代码:

import java.io.*;
import java.net.*;
import java.util.*;
import static java.nio.charset.StandardCharsets.*;
public class DirectMessengerServer
{
    public static void main(String args[]) throws IOException
    {
        Thread Server = new Thread () 
        {
              public void run ()
              {   
                    System.out.println("Server thread is now running");
                    ServerSocket server_socket = null;
                    Socket client_socket;
                    String message1;

                    for(int i = 0; i < args.length; i++)
                    {
                        if(args[0] == "-l")
                        {
                            try
                            {
                                System.out.println("Try block begins..");
                                int port_number1= Integer.valueOf(args[1]);
                                ServerSocket listener = new ServerSocket(port_number1);
                                System.out.println("Listening for connections..");
                                Socket socket = listener.accept();
                                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();
    }
}
import java.io.*;
导入java.net。*;
导入java.util.*;
导入静态java.nio.charset.StandardCharsets.*;
公共类DirectMessenger服务器
{
公共静态void main(字符串args[])引发IOException
{
线程服务器=新线程()
{
公开作废运行()
{   
System.out.println(“服务器线程正在运行”);
ServerSocket服务器_socket=null;
Socket-client\u-Socket;
字符串消息1;
对于(int i=0;i
我的问题是,为什么程序停止而不执行try块和/或为什么不执行“try块开始”?

两条注释:

  • 假设'-l'参数映射到
    arg[0]
    ,请确保在端口号参数之前输入'-l'参数
  • 使用
    “-l”.equals(arg[0])
    而不是
    args[0]=“-l”
    ,因为这在Java中是检查两个字符串是否具有相同内容的正确方法

  • 您将字符串与“==”进行比较,而不是
    equals()
    查看参数,然后每次检查第一个参数是否具有引用相等性。如果你想一想,这是没有意义的。还有,为什么你要在一个单独的线程中运行它?它可以简单地在程序的主线程上运行,并将产生相同的结果。@nachokk谢谢你,我相信你是对的,我现在将进行更改Kiskae是否有办法编写代码,以便我只检查一次(不知何故,我还需要检查-l是否存在..,是否应该用if语句替换for循环?@JacobG。我想知道如何启动和停止线程,以练习运行单独线程的语法(如果有意义的话)