2015-10-27 3 views
0

Я написал параллельный код Mergesort с настройкой по умолчанию 5 потоков и длиной массива 1 000 000, и я убедился, что приложение можно запустить из командной строки через ant start.Как перезаписать программу Java через командную строку

Теперь моя проблема в том, что я также должен предоставить небольшую командную строку для перезаписи максимального номера потока и длины массива с помощью параметров команды с консоли.

Вопрос: как я могу это сделать, и для этого мне нужно отредактировать мой основной код или файл 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> 

+1

Передайте номер потока в качестве аргумента программы, а затем получить его из 'args' массива, разобрать он в int и устанавливает поток. –

ответ

0

Проверьте сильфон код: 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(); 

    } 
} 

Ant Script:

<?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> 

Run муравей сценарий как:

ant start -Dnthread=10 

это установит число потоков как 10

+0

Когда я запускаю сценарий муравья как ant start -Dnthread = 10, он делает то, что я хочу, но когда я просто набираю ant start, это дает мне ошибку. "[java] java.lang.NumberFormatException: для строки ввода:" $ {nthread} "" Как я могу исправить эту ошибку? И большое спасибо: D – Merve

+0

@Merve, проверьте xml, вы также можете принять ответ, если он решил вашу проблему. – GaneshP

+0

Я чувствую необходимость добавить, что если вы хотите добавить больше аргументов командной строки, то это может сломаться. Возможно, система с ключевыми значениями для установки параметров? –