我创建了一个非常简单的包:
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
它不会出错,但也不起作用。 有没有办法获得有关正在发生的事情的详细信息?
答案 0 :(得分:2)
我不是100%肯定,但我认为你必须在清单中指定Bundle-SymbolicName。 您还必须导入javax.swing包(等..)。默认情况下,这些包不可用。
我们的应用程序在控制台中有很多输出,所以它忽略了一条消息。对我而言,通常有助于阻止和开始他的捆绑问题。
您还应该尝试使用控制台/ shell,它提供了诊断捆绑包问题的工具。
答案 1 :(得分:1)
我无法直接帮助您,但如果您错过了它:NetBeans平台(基于Swing的RCP)附带OSGi和Apache Felix支持:
答案 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
。您将在日志中看到启动捆绑包的整个过程。