2012-04-05 71 views
5

我正在開發一個項目。我試圖實現核心作爲獨立的jar文件,可以從命令行甚至Windows服務運行。核心部分負責跟蹤幾個文件併發送一些通知郵件。問題是,保持GUI完全獨立的最好方法是什麼?如何讓Java GUI完全獨立於Core

的GUI需要下列互爲作用與核心文件的

  • 發送列表
  • 接收來自核心關於多少這些文件已被處理的通知
  • 收到有關文件狀態通知即送/加工/在GUI中顯示失敗等信息
  • 收到來自核心的入局消息的信息

我有用Delphi和C開發的這個軟件.C被用來編碼核心邏輯和使用Windows消息和回調,我在C DLL /服務上註冊了Delphi GUI。我很困惑如何在java中實現它。

  • 觀察者模式?
  • 核心與gui之間的小型客戶端/服務器通信?

P.S: 我在這裏討論的原因是在Java中編寫代碼時學習和探索這些軟件的更好設計。我沒有要求觀察者模式文檔或客戶端服務器體系結構。可能還有其他可能的手段,我不知道。所以我期待着任何想法,設計或框架。

回答

3

Oberserver Pattern對於4個用例中的3個來說確實是正確的答案。

public interface Core { 

    sendFiles(List<File> files); 
    registerProgressListener(ProgressListener listener);    
    registerStatusListener(StatusListener listener); 
    registerMessageListener(MessageListener listener); 
} 

聽衆接口看起來真的類似於這樣一個

public interface ProgressListener{ 
    madeProgress(ProgressEvent) 
} 

ProgressEvent(另:

你的描述的水平,你可能會出現如下界面通過你的核心實現事件類)應該是值對象,例如

public class ProgressEvent { 
    public final double progress; 
    public final String fileName; 
    public ... // constructor 
} 

你可能希望你的核心和你的GUI在不同的線程中運行。否則,在覈心運行時,GUI不會對任何事件做出反應。由於核心不應該知道關於GUI的任何信息,因此線程之間的切換應該由GUI來完成,即聽衆應該注意使用SwingUtilities.invokeLaterinvokeAndWait來更新GUI。

+0

完美。在我選擇您的答案作爲答案之前等待更多答覆。 – 2012-04-05 17:02:51

1

也許這個答案看起來有點老派,但那些普通的舊IPCs呢?

使GUI將核心實例化爲單獨的線程,並僅通過消息隊列(java.util.concurrent。*)進行通信。使用它們發送文件,事件,進度報告和幾乎任何事物的列表。

然後你可以發貨幾個接口,只要所有的接口知道核心的入口點,你就可以開始工作。

+0

有沒有必要運行gui和核心在不同的進程 – 2012-04-05 15:36:31