【问题标题】:Eclipse RAP with OSGi Images of Labels won´t show带有标签的 OSGi 图像的 Eclipse RAP 不会显示
【发布时间】:2014-12-03 22:35:53
【问题描述】:

我有一个在 OSGI 中运行的 RAP 应用程序。我想显示一些图像。

很遗憾,我的浏览器不会显示我想要的文件的图像。 我用一个非常小的 gif 对其进行了测试,结果显示。但只有一个。 当我用另一个交换它时,它仍然无法工作。 确切的问题是,如果我在图片周围放置边框,我可以看到边框。 但是边界上什么都没有。

这几天我已经尝试了很多不同的方法,但我想我被困在了这一点上。

我试过这样做:

Image image3 = loadImage( parent.getDisplay(), "icons/test-100x50.png" );
Label l3 = new Label( parent, SWT.BORDER ); 
l3.setImage( image3 );

像这样:

public static Image loadImage( Display display, String name ) {
    Image result = null;
    InputStream stream = BasicEntryPoint.class.getClassLoader().getResourceAsStream( name );
    if( stream != null ) {
        try {
            result = new Image( display, stream );
        } finally {
            try {
                stream.close();
            } catch( IOException unexpected ) {
                throw new RuntimeException( "Failed to close image input stream", unexpected );
            }
        }
    }
    return result;
}

我什至用 MarkUps 尝试过

但我找不到我缺少的东西。

图像位于插件中名为icons 的文件夹中,我已在build.properties 文件中选择了icons 文件夹。

仅供参考:我看到了带有蓝色标题的 RAP 演示,并像这样实现了我的图片。 起初它可以工作,但是当我将它作为 OSGI 应用程序启动时,我只能看到命令 SWT.BORDER 的边框

【问题讨论】:

    标签: eclipse image osgi eclipse-rap


    【解决方案1】:

    我的猜测是loadImage() 中的streamnull。这意味着“图标”文件夹不是类路径的一部分。 Soley 将文件夹添加到 build.properties 文件不会使其成为类路径的一部分。

    您有两个选择:将图像放在类路径中或从插件加载图像。

    将图像放在类路径上

    将图像放在BasicEntryPoint 类旁边(即在同一个包中)。然后你可以用

    打开输入流
    BasicEntryPoint.class.getResourceAsStream( "test-100x50.png" );
    

    注意这里使用的是类而不是类加载器来获取资源流。其次,请注意,资源名称只是图像的名称(不包括其包的路径)。

    或者,您可以使用类加载器并指定图像的完整路径来获取输入流

    BasicEntryPoint.class.getClassLoader().getResourceAsStream( "com/example/myapp/test-100x50.png" );
    

    我推荐类路径解决方案,因为无论您是否在 OSGi 上运行,它的工作原理都是一样的。

    从插件加载图片

    如果您希望将图像文件保存在类路径之外,则必须像之前那样在 build.properties 中指定“图标”文件夹:

    bin.includes = META-INF/,icons/,...
    

    bundle 条目然后可以像这样访问:

    Bundle bundle = FrameworkUtil.getBundle( BasicEntryPoint.class );
    bundle.getEntry( "icons/test-100x50.png" ).openStream();
    

    另请参阅this article,了解这两种方法和可能的陷阱的详细比较。

    【讨论】:

    • 感谢您的回复。我昨天试过了,我设法让它工作。但问题是不同的。愚蠢的我...一开始我收到“rwt-resources path already used”错误。所以我的猜测是图像无法正确写入。删除所有 Eclipse.UI 包后,图像可以上传,因此在浏览器中可见。
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多