【问题标题】:how to pass command line arguments to main method dynamically如何动态地将命令行参数传递给main方法
【发布时间】:2012-02-04 02:18:51
【问题描述】:

我将我的主类作为命令行参数传递给启动 VM

现在我需要将命令行参数传递给那个主类

有什么办法吗?

这就是我的做法

    VirtualMachineManager manager = Bootstrap.virtualMachineManager();
    LaunchingConnector connector = manager.defaultConnector();
    Map arguments = connector.defaultArguments();
    ((Connector.Argument)arguments.get("options")).setValue(userVMArgs);
    ((Connector.Argument)arguments.get("main")).setValue(cmdLine);

这里 userVMargs 是我的主类的类路径,也是用于调用我的主类中的类方法的类的类路径

并且 cmdLine 拥有我的主类以及该类及其功能 我正在使用 Eclipse 作为 IDE 来开发我的项目

【问题讨论】:

  • 在 Eclipse 中,您可以在该类的运行/调试配置中执行此操作。在标签 (x)=Arguments 下。
  • 通过主类的类似方式。
  • 我知道我正在另一个启动的虚拟机中初始化另一个虚拟机,对于那个虚拟机我将参数作为主类传递,我需要传递一些参数,这个启动虚拟机将运行主类你需要一个机制在开头传递这些参数,我要传递给主类的参数是类及其函数。
  • 您能否更新问题,使其包含您在上述评论中提到的内容?

标签: java eclipse


【解决方案1】:

如果你想通过发送参数来启动虚拟机,你应该发送虚拟机参数而不是程序参数。

程序参数是传递给应用程序的参数,可通过 main 方法的“args”字符串数组参数访问。 VM 参数是传递给 JavaSW 解释器的参数,例如系统属性。上面的 Debug 配置本质上等价于:

java -DsysProp1=sp1 -DsysProp2=sp2 test.ArgsTest pro1 pro2 pro3

VM 参数在调用Java 解释器(即'java')之后和Java 类之前。程序参数跟在你的 Java 类之后。

考虑一个程序 ArgsTest.java:

package test;

import java.io.IOException;

    public class ArgsTest {

        public static void main(String[] args) throws IOException {

            System.out.println("Program Arguments:");
            for (String arg : args) {
                System.out.println("\t" + arg);
            }

            System.out.println("System Properties from VM Arguments");
            String sysProp1 = "sysProp1";
            System.out.println("\tName:" + sysProp1 + ", Value:" + System.getProperty(sysProp1));
            String sysProp2 = "sysProp2";
            System.out.println("\tName:" + sysProp2 + ", Value:" + System.getProperty(sysProp2));

        }
    }

如果给定输入,

java -DsysProp1=sp1 -DsysProp2=sp2 test.ArgsTest pro1 pro2 pro3 

在命令行中,在项目 bin 文件夹中会给出以下结果:

Program Arguments:
  pro1
  pro2
  pro3
System Properties from VM Arguments
  Name:sysProp1, Value:sp1
  Name:sysProp2, Value:sp2

【讨论】:

  • 你能举个例子吗?
  • 不,我得到了这个例子,但这不是我想做的方式。我发布了我想做的代码。
【解决方案2】:
Run ---> Debug Configuration ---> YourConfiguration ---> Arguments tab

【讨论】:

  • 不,我已经在运行一个主类,并且我正在从这个主类初始化另一个 VM,为了实例化另一个 VM,我们需要一些连接器参数,以便它可以启动该 VM。而这个人类需要调用另一个类的函数。那么我该如何传递呢?
【解决方案3】:

我们可以通过 Netbean 将字符串值作为参数传递给 main 方法,而无需在 java 中使用命令行参数概念

 package MainClass;
 import java.util.Scanner;
 public class CmdLineArgDemo {

static{
 Scanner readData = new Scanner(System.in);   
 System.out.println("Enter any string :");
 String str = readData.nextLine();
 String [] str1 = str.split(" ");
 // System.out.println(str1.length);
 CmdLineArgDemo.main(str1);
}  

   public static void main(String [] args){
      for(int i = 0 ; i<args.length;i++) {
        System.out.print(args[i]+" ");
      }
    }
  }

输出

Enter any string : 
Coders invent Digital World 
Coders invent Digital World

【讨论】:

  • 至于我要找的东西,这很适合,谢谢!
【解决方案4】:

转到运行配置并在参数选项卡中编写参数

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2010-12-11
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2013-10-11
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多