在我的osgi应用程序中,我有三个包travel.api,table.api和utils.travel.api取决于table.api哪个取决于utils.注意,travel.api不直接依赖utils.我使用aQute Bnd来生成清单,我相信它工作正常.清单如下所示.
有一个叫做类PageData的字段TableData,它有一个类型的字段,而这个字段又有一个类型的字段TestObject.PageData坐落于travel.api,TableData位于table.api以及TestObject位于utils.加载包时,这一切都正常.当我收到表示PageData对象的字节数组时,问题出现了.我必须在travel.api捆绑中反序列化它.这应该不是问题,因为它是定义的地方.我使用org.jboss.netty.handler.codec.serialization.ObjectDecoderInputStream并从travel.apibundle中传入类加载器.抛出以下异常,但基本上它说:
Caused by: java.lang.ClassNotFoundException: com.openaf.utils.TestObject not
found by travel.api [9].
Run Code Online (Sandbox Code Playgroud)
现在,这是有道理的,因为如果你看Import-Package的travel.api,你会看到com.openaf.utils(其中TestObject位于)未列出.如果我添加此包,则正确反序列化.但是,这似乎不是一个好的通用解决方案,因为我必须遍历每个PageData使用的字段并确保它们都在此模块中导入,并递归地在这些字段包含的每个字段等.
我在这里做错了吗?
使用OSGi时反对对象反序列化的最佳方法是什么?
如果我正确地做了并且我必须指定所有"深度"导入,有没有办法让Bnd进行"深度"生成?
任何帮助将不胜感激!
我正在使用felix v4作为我的osgi库.
Manifest-Version: 1
Bnd-LastModified: 1355404320862
Bundle-ManifestVersion: 2
Bundle-Name: travel.api
Bundle-SymbolicName: …Run Code Online (Sandbox Code Playgroud) 我正在使用JDK8 build 87并希望动态添加和删除css stylesheets它们,以便我的整个JavaFX应用程序可以使用它们.
目前我正在styleSheet使用此命令设置默认值:
Application.setUserAgentStylesheet(Application.STYLESHEET_MODENA);
Run Code Online (Sandbox Code Playgroud)
然后,当我想添加一个额外的CSS样式表时,我这样做:
com.sun.javafx.css.StyleManager.getInstance.addUserAgentStylesheet(styleSheet);
Run Code Online (Sandbox Code Playgroud)
这有效,但我有两个问题.首先,它使用的是私有 API,其次,一旦完成它,似乎没有办法删除它(我正在使用,OSGI因此模块来去经常).
有人谈到2012年初公众搬家StyleManager,但我不确定是否发生过任何事情. API
有没有人知道要添加的公共方法,styleSheets以便它们适用于整个JavaFX应用程序?如何删除它们?
(我没有权限创建新的javafx-8标记)
如何找到导出包的包?
我使用的是felix,我有一个像"com.test"这样的字符串,我怎么知道哪个包出口那个包?
我不想使用PackageAdmin,因为它已被弃用,我真的不想为每个bundle获取Export-Package标头并解析它.
有任何想法吗?
我正在查看Scala中的Option类,并且遇到了contains方法:
final def contains[A1 >: A](elem: A1): Boolean
Run Code Online (Sandbox Code Playgroud)
选项是协变的,所以我理解它不能只使用A作为elem的类型.但是,鉴于A1类型从未使用过,为什么方法不能这样:
final def contains(elem: Any): Boolean
Run Code Online (Sandbox Code Playgroud)
这只是一种风格还是我错过了一些重要的东西?
我有一个问题,当我向用作选项卡的组件添加鼠标侦听器时,我无法切换选项卡。
这说明了问题:
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
public class JTabBug {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTabbedPane jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("Red", new JLabel("Roses"));
jTabbedPane.addTab("Blue", new JLabel("Skies"));
jTabbedPane.addTab("Green", new JLabel("Grass"));
for (int i = 0; i < jTabbedPane.getTabCount(); i++) {
JLabel tabComponent = new JLabel(jTabbedPane.getTitleAt(i));
tabComponent.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("dragging");
}
});
jTabbedPane.setTabComponentAt(i, tabComponent);
}
JFrame jFrame = new JFrame("Testing");
jFrame.add(jTabbedPane);
jFrame.setSize(400, 500);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); …Run Code Online (Sandbox Code Playgroud) 我们正在使用Maven来管理我们的想法项目,但是在从想法项目中排除目录时遇到了问题。
使用想法,我将转到项目设置| 模块| 来源并选择我要排除的文件夹,然后单击“排除”按钮。从pom加载项目时,将自动排除目标。我也想排除日志文件夹。
在Maven中,我使用了一个想法Maven插件,它说我可以排除文件夹。我正在使用此代码,但它似乎不起作用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-idea-plugin</artifactId>
<version>2.3-atlassian-1</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
<exclude>
${project.basedir}/logs
</exclude>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的格式以及输入了完全限定的路径(作为测试),但是似乎没有什么东西可以从我的想法项目中排除logs目录。
任何人有任何想法如何使它工作?
谢谢,尼克。
java ×3
apache-felix ×2
osgi ×2
bnd ×1
javafx-2 ×1
javafx-8 ×1
jtabbedpane ×1
maven-2 ×1
scala ×1
swing ×1