2011-05-25 21 views
3

我試圖通過字符串從一個Java的Aplications參數,以秒爲啓動參數傳遞字符串從一個Java應用程序PARAMS另一個

例如我有必須調用啓動另一個Java Aplication Aplications(只包含只有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的Aplication傳遞一些值(必須有所謂的System.exit(0);)到另一個Java Aplication,另一種方式,因爲我試過通過使用Process /的ProcessBuilder

EDIT2:我crosspost http://forums.oracle.com/forums/thread.jspa?threadID=2229798&tstart=0

接受的答案從OTN

回答

2

接受在OTN上的jverd回答

是的,還有其他方法。這種方式不能滿足您的需求嗎?

  1. 還有另一個EXEC()的簽名,其採用陣列,其中所述第一元素是命令和元件的其餘部分是其ARGS。它可能會或可能不會成爲可變參與者的呼叫。這看起來像這樣,儘管它可能不像我所擁有的那樣工作。 (「cmd」,「/ c」,「start」,「java」,「-jar」,「C:\ Dialog.jar」,「Passed info」);

//

OR

exec(new String[] {"cmd", "/c", "start", "java", "-jar", "C:\\Dialog.jar", "Passed info"}); 
  1. 你可以把信息在第二過程中讀取文件。

  2. 您可以將信息存儲在第二個進程查詢的數據庫中。

  3. 您可以讓一個進程打開一個ServerSocket,另一個進程連接到它並以這種方式發送數據。

  4. 你可以使用像JMS,MQ活動等更高級別的通訊工具

  5. 你可以使用RMI。

  6. 您可以使用CORBA。

我確定還有其他方法。

我不知道哪種方法最適合您的需求。這是你需要弄清楚的,儘管如果你不能決定,如果你在這裏發佈更多關於你的需求的細節,有人可能會提供一些建議。

0

哥們,

閱讀When runtime exec won't並獲得如果你仍然陷入困境,回到我們身邊。

這是一篇很好的文章。我猜你的「參數」有問題「;-)

乾杯。基思。

+0

我認爲我不能問題與Proces或ProcessBuilder,這個例子正確地通過'通過信息',我會編輯我的話題 – mKorbel 2011-05-25 09:59:02

相關問題