线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 索引 0 超出 RMI 长度 0 的范围

问题描述

我有三个java文件一个是RMI服务器和RMI客户端和接口文件,如下: 服务器:

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;

public class RmiServer extends 
  java.rmi.server.UnicastRemoteObject implements ReceiveMessageInterface{
  String address;
  Registry registry; 

  public void receiveMessage(String x) throws remoteexception{
  System.out.println(x);
  }
  
  public RmiServer() throws remoteexception{
  try{  
  address = (InetAddress.getLocalHost()).toString();
  }
  catch(Exception e){
  System.out.println("can't get inet address.");
  }
  int port=3233; 
  System.out.println("this address=" + address +  ",port=" + port);
  try{
  registry = LocateRegistry.createRegistry(port);
  registry.rebind("rmiServer",this);
  }
  catch(remoteexception e){
  throw e;
  }
  }
  static public void main(String args[]){
  try{
  RmiServer s = new RmiServer();
  }
  catch (Exception e){
  e.printstacktrace();
  System.exit(1);
  }
  }
}

客户:

import java.rmi.*;
import java.rmi.registry.*;

import java.net.*;

public class RmiClient{
  static public void main(String args[]){
  ReceiveMessageInterface rmiServer;
  Registry registry;
  String serverAddress=args[0];
  String serverPort=args[1];
  String text=args[2];
  System.out.println
   ("sending " + text + " to " +serverAddress + ":" + serverPort);
  try{
  registry=LocateRegistry.getRegistry
  (serverAddress,(new Integer(serverPort)).intValue());
  rmiServer=(ReceiveMessageInterface)(registry.lookup("rmiServer"));
  // call the remote method
  rmiServer.receiveMessage(text);
  }
  catch(remoteexception e){
  e.printstacktrace();
  }
  catch(NotBoundException e){
  e.printstacktrace();
  }
  }
}

界面:

import java.rmi.*;

public interface ReceiveMessageInterface extends Remote{
  void receiveMessage(String x) throws remoteexception;
}

所以基本上,当我运行服务器时,它会提供我的笔记本电脑地址和正在运行的端口,并且运行良好 但是,问题是当我在运行服务器后运行客户端时,它不断抛出此错误

线程“main”中的异常java.lang.Arrayindexoutofboundsexception: 索引 0 超出长度 0 的边界

哪个客户端文件在哪一行:

String serverAddress=args[0];

解决方法

如果你看一下方法“static public void main(String args[])”,String args[] 是一个标准约定。当您以您使用的方式调用您的程序时,您应该在命令行中将值传递给这个数组。

出现异常的原因是,您的数组中没有 args[0],因为您没有传递值。当您在程序中访问 args[0]、args[1] 和 args[2] 时,请确保在调用程序时通过命令行传递三个值。

示例:

public class X{
    public static void main (String[] args) {
        for (String s: args) {
            System.out.println(s);
        }
    }
}

如何运行

java X a ab abc

预期结果

一个

ab

ABC

,

由于没有传递给 main 方法的参数值,这就是它抛出错误的原因。

我相信您没有将命令行参数分配给 main 方法。 如果您使用任何 IDE 来运行项目,请搜索如何在项目执行期间传递参数。

您可以在此处找到如何为 Netbeans IDE 配置参数 - Netbeans how to set command line arguments in Java

如果您正在使用任何其他 IDE,那么类似地搜索。

否则,您只需通过命令提示符运行即可向程序提供命令行参数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...