1

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

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

4 回答 4

2

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

我们的应用程序的控制台中有很多输出,因此它不会忽略消息。对我来说,停止和启动有问题的捆绑通常会有所帮助。

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

于 2011-10-20T21:37:55.310 回答
1

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

http://wiki.netbeans.org/OSGiAndNetBeans

于 2011-10-20T14:18:59.047 回答
0

在针对此类问题的众多调试选项中,Felix Web 控制台 [1] 是我最喜欢的。

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

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

于 2011-10-21T09:53:43.720 回答
0

首先,您在清单中错过了“Bundle-SymbolicName”标签,这是强制性的。

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

lb

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

start <your_bundle_number>

并查看日志。

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

于 2011-11-16T08:03:47.950 回答