Я создаю инструмент, который должен конвертировать из формата A в формат B через командную строку Windows. Я запрограммировал что-то вроде интерактивного режима. cmd ожидает ввода команд и обрабатывает их. Теперь я хотел передать некоторые аргументы, если вызову программу. Аргументы будут переданы, но программа не будет выполнять команды сама по себе.
Я передаю такие аргументы:
java -jar test.jar -interactive //activates the interactive mode, which does not make any problems
и так (передача исходного файла, целевого места для сохранения преобразованного файла, целевого формата и, наконец, файла конфигурации, используемого во время преобразования):
java -jar test.jar C:\Users\User\Desktop\test.json C:\Users\User\Desktop .xes C:\Users\User\Desktop\test.properties
код пока:
public static void main(final String[] args) throws IOException, InterruptedException {
if (args[0].equals("-interactive")) {
testing test = new testing();
test.startCMD();
} else if (args[0] != null && args[1] != null && args[2] != null && args[3] != null) {
final testing test = new testing();
test.startCMD();
//the following construct doesn't work unfortunatelly
worker = Executors.newSingleThreadScheduledExecutor();
Runnable task = new Runnable() {
@Override
public void run() {
test.setSourceFile(args[0]);
test.setTargetPath(args[1]);
test.setTargetFormat(args[2]);
test.setConfigFilePath(args[3]);
System.out.println("Invoking the conversion routine now ...");
ConverterControl control = new ConverterControl();
control.link(sourceFilePath, targetPath, configFilePath, targetFormat, fileConfig);
}
};
worker.schedule(task, 5, TimeUnit.SECONDS);
}
}
public void startCMD() throws IOException, InterruptedException {
String[] command
= {
"cmd",};
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Welcome to the Windows command line prompt." + System.lineSeparator());
System.out.println("Please type \"help\" to receive a list of commands available in this environment.");
//String s = in.readLine();
String input;
while ((input = in.readLine()) != null) {
//process the inputs
}
Различные setter
, которые вы видите в основном методе, просто устанавливают переданную информацию в переменную, которая объявлена в верхней части класса. А потом эти переменные должны быть переданы в ConverterControl
, у которого в методе link()
есть вся процедура преобразования. Программа останавливается, если я передаю 4 аргумента (см. второй вызов программы вверху) после выполнения команды startCMD()
.
Кто-нибудь знает, как вызвать эти методы и запустить ConverterControl
автоматически?