Передать String как параметры из одного Java-приложения в другое - PullRequest
3 голосов
/ 25 мая 2011

Я пытаюсь передать String в качестве параметра от одной Java-аппликации ко второй в качестве параметра StartUp

например, у меня есть Aplications, которые должны вызывать запуск другого Java-приложения (просто содержит только JOptionPane, JDialog или простой JFrame) до System.exit(0);, там я пытаюсь отправить некоторые описания из закрывающего приложения другому,

этот код моделирует то, что я пробовал, и в этой форме код работает правильно и отображает строку в JTextArea ...

    import java.io.IOException;
    import java.util.concurrent.*;

    public class TestScheduler {

        public static void main(String[] args) throws InterruptedException {
            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
            executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
            executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(true);
            for (int i = 0; i < 10; i++) {
                final int j = i;
                System.out.println("assign : " + i);
                ScheduledFuture<?> future = executor.schedule(new Runnable() {

                    @Override
                    public void run() {
                        System.out.println("run : " + j);
                    }
                }, 2, TimeUnit.SECONDS);
            }
            System.out.println("executor.shutdown() ....");
            executor.shutdown();
            executor.awaitTermination(10, TimeUnit.SECONDS);
            try {
                Process p = Runtime.getRuntime().exec("cmd /c start java -jar C:\\Dialog.jar 'Passed info'");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            System.out.println("System.exit(0) .....");
            System.exit(0);
        }

        private TestScheduler() {
        }
    }

//
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

public class Main {

    private static ArrayList<String> list = new ArrayList<String>();

    public Main() {
        JFrame frm = new JFrame();
        JTextArea text = new JTextArea();
        if (list.size() > 0) {
            for (int i = 0; i < list.size(); ++i) {
                text.append(list.get(i));
            }
        }
        JScrollPane scroll = new JScrollPane(text,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.add(scroll, BorderLayout.CENTER);
        frm.setLocation(150, 100);
        frm.setSize(new Dimension(400, 300));
        frm.setVisible(true);
    }

    public static void main(String[] args) {
        if (args.length > 0) {
            for (String s : args) {
                list.add(s);
                System.out.print(s + " ");
            }
        }
        Main m = new Main();
    }
} 

мой вопрос:

EDIT1: если существует другой способ передачи некоторого значения из одного Java-приложения (должен называться System.exit (0);) в другое Java-приложение, другим способом, как я пытался с помощью Process / ProcessBuilder

РЕДАКТИРОВАТЬ2: мой кросспост http://forums.oracle.com/forums/thread.jspa?threadID=2229798&tstart=0

принял ответ от OTN

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

принят ответ от jverd на OTN

Да, есть и другие способы.Разве этот способ не отвечает вашим потребностям?

  1. Есть еще одна сигнатура exec (), которая принимает массив, где первый элемент - это команда, а остальные элементы - ее аргументы.Это может быть или не быть вызов varargs.Это выглядело бы примерно так, хотя могло бы работать не совсем так, как у меня.

    exec ("cmd", "/ c", "start", "java", "-jar", "C: \ Dialog.jar "," Passed info ");

// ИЛИ

exec(new String[] {"cmd", "/c", "start", "java", "-jar", "C:\\Dialog.jar", "Passed info"});
  1. Вы можете поместить информацию вфайл, который читает второй процесс.

  2. Вы можете сохранить информацию в базе данных, которую запрашивает второй процесс.

  3. У вас может быть один процессоткройте ServerSocket, а другой подключитесь к нему и отправьте данные таким образом.

  4. Вы можете использовать инструмент обмена сообщениями более высокого уровня, такой как JMS, Active MQ и т. д.

  5. Вы можете использовать RMI.

  6. Вы можете использовать CORBA.

Я уверен, что есть и другие подходы, какну.

Я понятия не имею, какой подход лучше всего подходит для ваших нужд.Это то, что вам нужно выяснить, хотя, если вы не можете решить, если вы опубликуете здесь более подробную информацию о ваших требованиях, кто-то может предложить какой-то совет.

0 голосов
/ 25 мая 2011

Чувак,

Чтение Когда exec во время выполнения не будет и вернется к нам, если вы все еще застряли.Я предполагаю, что у вас "проблема с вашим параметром "; -)

Приветствия.Кит.

...