【问题标题】:How to overwrite Java Programm via Command Line如何通过命令行覆盖 Java 程序
【发布时间】:2016-01-26 17:26:48
【问题描述】:

我编写了一个并发合并排序代码,默认设置为 5 个线程,数组长度为 1 000 000,我确保应用程序可以通过 ant start 从命令行启动。

现在我的问题是我还必须提供一个小的命令行处理来通过控制台的命令参数覆盖最大线程数和数组长度。

问题是我该如何做到这一点,为此我需要编辑我的主代码或 build.xml 还是只是一个命令,如转到 main,更改这个和那个?

主要看起来像这样:

public class Main {

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

int nThreads=5;

int[] original = new int[1000000]; 
       for (int i=0; i<original.length; i++) {
        original[i] = (int) (Math.random()*9);
    }

    Mergesorts worker = new Mergesorts(original,nThreads);
    System.out.println("ressource: 1 of 5 thread(s) used");
    Thread w = new Thread(worker);
    w.start(); 
    w.join();

    }}

这就是我的 build.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>


<project default="start" name="Mergesort-compile and run">

<target name="compile">
 <javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>


<target name="start" depends="compile">
    <java classname="Main">
        <classpath path="Mergesort"/>
        </java>
</target>

【问题讨论】:

  • 将线程号作为程序参数传递,然后从您的args 数组中获取它,将其解析为 int 并设置线程。

标签: java xml ant build cmd


【解决方案1】:

查看以下代码:Java

public class Main {

  public static void main(String[] args) throws InterruptedException {
    int nThreads;

    if (args.length <= 0) {
      nThreads = 5;  // default number of threads
    } else {
      nThreads = Integer.parseInt(args[0]); // first passed parameter value 
    }

    int[] original = new int[1000000];
    for (int i = 0; i < original.length; i++) {
      original[i] = (int) (Math.random() * 9);
    }

    Mergesorts worker = new Mergesorts(original, nThreads);
    System.out.println("ressource: 1 of 5 thread(s) used");
    Thread w = new Thread(worker);
    w.start();
    w.join();

  }
}

蚂蚁脚本:

<?xml version="1.0" encoding="UTF-8"?>


<project default="start" name="Mergesort-compile and run">

<target name="compile">
 <javac includeantruntime="false" srcdir="./src" destdir="Mergesort" />
</target>


<target name="start" depends="compile">
  <property name="nthread" value="5"/>

    <java classname="Main">
        <classpath path="Mergesort"/>
        <arg value="${nthread}" />
     </java>
</target>

运行 ant 脚本为:

ant start -Dnthread=10 

这会将线程数设置为 10

【讨论】:

  • 当我以 ant start -Dnthread=10 的身份运行 ant 脚本时,它会执行我想要的操作,但是当我输入 ant start 时,它会给我一个错误。 "[java] java.lang.NumberFormatException: For input string: "${nthread}" " 我该如何解决这个错误?非常感谢你:D
  • @Merve,检查xml是否被修改,如果解决了你的问题,你也可以接受答案。
  • 我觉得有必要补充一点,如果您希望稍后添加更多命令行参数,那么这可能会中断。也许是一个键值系统来设置选项?
猜你喜欢
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2015-01-25
相关资源
最近更新 更多