2016-12-28 7 views
1

Я пытаюсь запустить Java-программу из другой Java-программы, где обе программы не находятся в одном пакете на самом деле даже не в одном проекте и для начала нашел ответ на SO, вот код:Как сделать класс доступным для Runtime java-команды вне пакета

try { 
      Process processCompile = Runtime.getRuntime().exec("javac Main.java"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Process processRun = null; 
     try { 
      processRun = Runtime.getRuntime().exec("java Main"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      printLines(" stdout:", processRun.getInputStream()); 
      printLines(" stderr:", processRun.getErrorStream()); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Исполнительное следующий код дает мне следующее сообщение об ошибке:

Error: Could not find or load main class Main 

Теперь я понимаю, что я должен каким-то образом сделать Main.java доступны универсально запустить его из другой программы. Я не уверен, как это сделать.

Я бы очень признателен за помощь в этом.

+0

является ли потребность в этой другой программе для работы в качестве своего собственного процесса Java? если нет, то это больше проблема управления зависимостями. – mre

+0

См. Также [Когда Runtime.exec() не будет] (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html) для многих хороших советы по правильному созданию и обработке процесса. Затем проигнорируйте это, ссылаясь на 'exec' и используйте' ProcessBuilder' для создания процесса. Также разбивайте 'String arg' на' String [] args' для учета таких вещей, как пути, содержащие пробельные символы. –

+0

@AndrewThompson Спасибо, Андрей, я посмотрю ... Оцените это. –

ответ

0

I am trying to run a Java program from another Java program where both programs are not in the same package in fact not even in the same project and to begin with I had found an answer on SO, here is the code:

Этом класс определен в пакете, вы должны указать его при запуске команды Java:

try { 
     processRun = Runtime.getRuntime().exec("java Main"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Кроме того, если класс был определен в пакете, вы бы лучше, чтобы определить это в структуре каталога, симметричной для пакета. Я сказал, что, поскольку при компиляции класса, вы не указать путь к пакету файла Main.java:

try { 
      Process processCompile = Runtime.getRuntime().exec("javac Main.java"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
+0

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

+0

Также теперь, когда я даю ему полный путь, я все равно получаю следующую ошибку: Не удалось найти или загрузить основной класс C: \ Users \ nick \ IdeaProjects \ HelloWorld \ src \ Main, но теперь ошибка находится в processRun = Runtime.getRuntime () .exec («java Main»), поэтому в основном компиляция прошла успешно, но выполнение все еще не выполнено. –

+0

«Основной» класс, который вы используете, не имеет пакета? 'C: \ Users \ nick \ IdeaProjects \ HelloWorld \ src' не является Java-пакет. – davidxxx