2011-10-20 18 views
1

我創建了一個非常簡單的包:Swing應用程序和OSGi費利克斯

public class Main implements BundleActivator, ServiceListener{ 

public void start(BundleContext bc) throws Exception { 

    bc.addServiceListener(this); 

    //trivial system out 
    System.out.println("started"); 

    //output to file 
    FileWriter fw = new FileWriter("test.txt"); 
    fw.write("it has worked"); 
    fw.close(); 

    //opening of a frame 
    JFrame f = new JFrame(); 
    JLabel l = new JLabel("test"); 
    f.add(l); 
    f.setVisible(true); 
    f.pack(); 

} 

(other methods with empty body) 

我已經編輯清單文件:

Bundle-Name: Service listener example 
Bundle-Description: A bundle that displays messages at startup and whe service events occur 
Bundle-Vendor: Apache Felix 
Bundle-Version: 1.0.0 
Bundle-Activator: tosgi01.Main 
Import-Package: org.osgi.framework 

我jar'ed了這一切的東西,推出felix和: 開始文件:testosgi.jar

它不會給出錯誤,但不起作用。 有沒有辦法獲得關於發生了什麼的一些詳細信息?

+0

我覺得這個鏈接[http://www.javacodegeeks.com/2012/04/osgi-modularizing-your-application.html](http://www.javacodegeeks.com/2012/04/osgi-modularizing -your-application.html)爲您提供更好的解決方案。 –

回答

1

我不能直接幫助你,但如果你錯過了:NetBeans平臺(基於Swing RCP)配備了OSGi和Apache的菲利克斯支持:

http://wiki.netbeans.org/OSGiAndNetBeans

+0

這是非常有趣的,但我的應用程序應該只是幾個可插拔模塊周圍的容器。不可停靠的窗口,沒有工具欄,可能沒有桌面窗格。 – AgostinoX

2

我不是100%肯定,但我認爲你必須在清單中指定Bundle-SymbolicName。 您還必須導入javax.swing包(etc ..)。這些軟件包默認不可用。

我們的應用程序在控制檯中有很多輸出,因此它忽略了一條消息。對我而言,停止並開始捆綁問題通常會有所幫助。

您還應該給控制檯/ shell試一試它提供的工具來診斷bundle問題。

+0

+1這是正確的,捆綁不會沒有SymbolicName和@ chilicat.dev狀態註冊;使用控制檯命令可以更好地處理髮生的事情。 – earcam

0

在這些問題的衆多調試選項中,Felix Web控制檯[1]是我的最愛。

檢查您的軟件包是否處於活動狀態,如果沒有查看控制檯軟件包詳細信息頁面上的錯誤消息。如果你對Swing的東西有疑問,你也可以先刪除它,然後檢查你的bundle激活器是否確實被調用。

[1] http://felix.apache.org/site/apache-felix-web-console.html

0

首先,你已經錯過了你的清單,這是強制性的 「捆綁 - SymbolicName」 標籤。其次,Felix有一個名爲Gogo的控制檯包,它可以幫助您瞭解您的包是否已啓動。只需安裝該軟件包並寫入控制檯

lb 

並且您將列出已安裝的軟件包列表。找到你的包,如果它有「活動」狀態,一切都很好。如果不是,寫

start <your_bundle_number>

和查看日誌。

如果沒有幫助,請在文件conf/config.properties行felix.log.level=1中找到並將其更改爲felix.log.level=4。您將在日誌中看到啓動bundle的全部過程。