如何动态地将命令行参数传递给main方法

时间:2012-01-06 10:25:20

标签: java eclipse

我将我的主类作为命令行参数传递给启动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来开发我的项目

4 个答案:

答案 0 :(得分:42)

如果要通过发送参数来启动VM,则应发送VM参数而不是Program参数。

程序参数是传递给应用程序的参数,可以通过main方法的“args”String数组参数访问它们。 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

答案 1 :(得分:4)

Run ---> Debug Configuration ---> YourConfiguration ---> Arguments tab

enter image description here

答案 2 :(得分:1)

我们可以将字符串值作为参数传递给main方法而不使用java中的命令行参数概念 Netbean

 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

答案 3 :(得分:0)

转到“运行配置”,在参数选项卡中,您可以编写参数