2009-12-03 32 views
1

我正在用java,swt和osgi編寫圖形應用程序。包A包含應用程序主窗口。根據用戶的選擇,必須加載不同的用戶界面。也就是說,不同的GUI在不同的包中。 所以主包A調用包B來繪製新的圖形界面。包B包含很多類,SWT控件擴展了Composite類。這個控件需要父母來繪製。問題在於,軟件包B需要在軟件包A上繪圖。我試圖發送將從A保存到B的新組件的父組件,但是當B創建新控件時,它會崩潰。OSGI + SWT:如何拆分許多包中的視圖(GUI)

有什麼想法?如何解決這個問題呢?

+0

您能提供關於「崩潰」的更多信息嗎?例如。一個異常堆棧跟蹤?這可能是OSGi MANIFEST文件中的軟件包導出和導入問題。 – 2009-12-05 14:01:38

回答

1

聽起來就像你試圖設置一些複雜的交叉依賴的東西,工作不太好。

您是否知道白板模式?你可以在這裏閱讀更多: http://www.osgi.org/wiki/uploads/Links/whiteboard.pdf

所以基於這種模式,讓我們說A是加載主UI的'主'捆綁。爲了簡單起見,假設束A也出口如下界面:

public interface UIExtensionService { 

    Control createExtension(Composite parent); 

} 

包B(和C,d,E,F等),然後註冊該接口的適當實現。如果您想根據給定的用戶輸入顯示特定的內容,則可以在註冊該服務時使用屬性,以幫助您的主包縮小特定實現的範圍。

Bundle A然後使用BundleContext查找UIExtensionService的適當實現,並調用傳遞給您要使用的父級的createExtension方法。

希望有所幫助。