swing应用程序和osgi felix

时间:2011-10-20 14:09:51

标签: java osgi apache-felix

我创建了一个非常简单的包:

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

我已经把所有这些东西都搞砸了,推出了felix和: 启动文件:testosgi.jar

它不会出错,但也不起作用。 有没有办法获得有关正在发生的事情的详细信息?

4 个答案:

答案 0 :(得分:2)

我不是100%肯定,但我认为你必须在清单中指定Bundle-SymbolicName。 您还必须导入javax.swing包(等..)。默认情况下,这些包不可用。

我们的应用程序在控制台中有很多输出,所以它忽略了一条消息。对我而言,通常有助于阻止和开始他的捆绑问题。

您还应该尝试使用控制台/ shell,它提供了诊断捆绑包问题的工具。

答案 1 :(得分:1)

我无法直接帮助您,但如果您错过了它:NetBeans平台(基于Swing的RCP)附带OSGi和Apache Felix支持:

http://wiki.netbeans.org/OSGiAndNetBeans

答案 2 :(得分:0)

在这些问题的许多调试选项中,Felix Web控制台[1]是我最喜欢的。

检查您的软件包是否处于活动状态,如果没有查看控制台软件包详细信息页面上的错误消息。如果你对Swing的东西有疑问,你也可以先删除它,然后检查你的捆绑激活器是否确实被调用了。

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

答案 3 :(得分:0)

首先,您在清单中遗漏了“Bundle-SymbolicName”标记,这是强制性的。

其次,Felix有一个名为Gogo的控制台软件包,它可以帮助您了解您的软件包是否已启动。只需安装此捆绑包并写入控制台

即可
lb

,您将获得已安装捆绑包的列表。找到你的捆绑包,如果它有“活跃”状态,一切都很好。如果没有,请写

start <your_bundle_number>

并查看日志。

如果没有帮助,请在文件conf / config.properties行felix.log.level=1中找到并将其更改为felix.log.level=4。您将在日志中看到启动捆绑包的整个过程。