Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как вызвать первую программу из второй?


Автор: kornata 24.4.2010, 16:37
Как вызвать первую программу из второй?  smile 

Автор: jk1 24.4.2010, 16:45
В самом простом случае так:
Код

 if (Desktop.isDesktopSupported()){
          Desktop.getDesktop().open(new File("путь к исполняемому файлу первой программы"));
      }

Если надо взаимодействовать с запущенным процессом, то нужно запускать так:
Код

 ProcessBuilder builder = new ProcessBuilder("путь к исполняемому файлу первой программы");
 Process p = builder.start();

Ну и конечно не рекомендуемый, но тем не менее работающий вариант:
Код

 Runtime.getRuntime().exec("путь к исполняемому файлу первой программы");

Автор: kornata 24.4.2010, 16:48
Не понятно, можно объяснить чайнику?

Добавлено через 2 минуты и 3 секунды
Это кусочек кода и я не могу посматреть, как это работает. Можно примеры двух простеньких программ, где одна вызывает другую?

Автор: jk1 24.4.2010, 16:55
1) В качестве "первой" из вашей задачи возьмите любую программу из установленных на вашей системе
2) "Вторую" напишите сами, пример для первого из описанных мной способов:
Код

public class Test {

    public static void main(String[] args) throws Exception {
        if (Desktop.isDesktopSupported()) {
            Desktop.getDesktop().open(new File("c:\\Program Files\\Adobe\\Reader 9.0\\Reader\\acrord32.exe"));
        }
    }
}

В пример надо не забыть подставить путь к исполняемому файлу "первой" программы
3) Скомпилируйте и запустите класс, вы увидите как запустится "первая" программа

Автор: kornata 24.4.2010, 17:38
jk1,  спасибо, всё получилось!  smile 

Автор: kornata 24.4.2010, 17:55
Ну exeя запустила, а джава программа не запускается:


Exception in thread "main" java.io.IOException: Cannot run program "Data.java": CreateProcess error=2, The system cannot find the file specified
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at pr1kor.Main.main(Main.java:10)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 1 more

Автор: jk1 24.4.2010, 18:00
Цитата

The system cannot find the file specified

все же написано - системе не удается найти указанный файл. Скорее всего вы неверно указали путь к нему или у вас нет прав на доступ к файлу.

Автор: kornata 24.4.2010, 18:35
Exception in thread "main" java.io.IOException: Cannot run program "C:\Documents and Settings\st52309\My Documents\NetBeansProjects\Pr1kor\src\pr1kor\Data.java": CreateProcess error=193, %1 is not a valid Win32 application
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at pr1kor.Main.main(Main.java:10)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 1 more
Java Result: 1

Автор: MaxPayneC 24.4.2010, 19:35
Способами, которые описал jk1, можно запускать исполняемые файлы. *.java - это исходный код, а не исполняемый файл.

Автор: kornata 24.4.2010, 19:39
MaxPayneC, и как тогда нужно запускать?

Автор: MaxPayneC 24.4.2010, 20:00
Вам нужно запустить другую программу, написанную на джаве, т.е. файл *.class?

Автор: jk1 24.4.2010, 20:19
kornata, скажите, а вы понимаете разницу между файлом исходного кода и исполняемым файлом?

.java - это исходный код, сам по себе он не может быть запущен
.class - так называемый байт-код, получаемый из .java путем компиляции

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

Автор: kornata 25.4.2010, 10:40
Запустила класс, а что нужно дописать, чтобы вывелись результаты первой программы?

Автор: kornata 25.4.2010, 17:18
Неужели никто не знает?

Автор: kornata 26.4.2010, 12:58
Помогите запустить вторую программу.

Автор: yeputons 26.4.2010, 21:19
1)Пишем первую программу (пример):
Код

public class First {
  public static void main(String[] args) throws Exception {
    System.out.println("Hello from the first program!");
  }
}

2)Компилируем. получили файл First.class. поместили его в одну директорию со второй прогой:
Код

public class Second {
  public static void main(String[] args) throws Exception {
    System.out.println("Hello from the second program!");
    System.out.println("Running the first program...");
    First.main(args);
  }
}

3)Запускаем
4)???
5)PROFIT!

Аналогично мы можем вызвать любой другой метод из первого класса:
Код

First.doSomething(...);

Главное, чтобы при компиляции javac смог найти First.class

Автор: Dancer 27.4.2010, 10:28
http://forum.vingrad.ru/forum/topic-297864.html
Дык ведь всё же работает, уже давно ответ давался. чего не так то?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)