小编Ste*_* S.的帖子

按多列对 JFace TableViewer 进行排序

我很确定我要问的是不可能的,但我在任何地方都找不到对这个问题的明确否定,所以它是这样的:

考虑以下工作示例:

public class TableViewerSorter {

private static final String DATA_COMPARATOR = "comparator";

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final TableViewer viewer = new TableViewer(shell, SWT.BORDER);
    Table table = viewer.getTable();
    table.setHeaderVisible(true);
    viewer.setContentProvider(ArrayContentProvider.getInstance());
    viewer.setSorter(new ViewerSorter() {

        @Override
        public int compare(Viewer v, Object e1, Object e2) {
            TableColumn sortColumn = table.getSortColumn();
            Comparator comparator = sortColumn == null ? null : (Comparator) sortColumn.getData(DATA_COMPARATOR);
            if (comparator != null && table.getSortDirection() == SWT.UP) …
Run Code Online (Sandbox Code Playgroud)

java jface

5
推荐指数
1
解决办法
1623
查看次数

无法确定根目录是否存在

我有(可能很常见)用例,我想在共享驱动器上创建一个文件夹:

public static void main(final String[] args) throws IOException {
    final Path path = new File("H:\\test-folder").toPath();
    Files.createDirectories(path);
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Exception in thread "main" java.nio.file.FileSystemException: H:\test-folder: Unable to determine if root directory exists
  at java.nio.file.Files.createDirectories(Unknown Source)
  at org.acme.project.Main.main(Main.java:15)
Run Code Online (Sandbox Code Playgroud)

(这里奇怪的部分是谷歌几乎不知道这个例外.)

这个问题似乎完全是Eclipse的错,因为上面的代码完全可以从命令行运行.但是因为我在Eclipse插件中需要它,所以这些信息与我完全无关.我只是需要它才能工作.

那么在网络驱动器上创建文件夹需要做些什么呢?

java eclipse eclipse-plugin

5
推荐指数
0
解决办法
2482
查看次数

找到重复的包执行

我在标签中有一个带有此插件定义的父pom.xmlpluginManagement

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>default-bundle</id>
            <phase>package</phase>
            <goals>
                <goal>bundle</goal>
            </goals>
        </execution>
        <execution>
            <id>create-source-manifest</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>manifest</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

然后,我有实际项目的pom.xml尝试添加执行:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
</plugin>
Run Code Online (Sandbox Code Playgroud)

它导致错误:找到重复的捆绑软件执行。请删除您pom.xml中所有显式定义的包执行。

但是,如果我plugin在Eclipse中删除此标记并再次添加它,该错误将消失。

这是Eclipse M2E问题吗?还是这是一个实际的Maven问题?如果是这样,我该如何解决?我显然不能删除上面的处决。

我可以添加以下内容:

<executions>
    <execution><id>default-bundle</id></execution>
    <execution><id>create-source-manifest</id></execution>
</executions>
Run Code Online (Sandbox Code Playgroud)

但这对于“执行父pom中定义的所有内容”非常冗长,而且如果我想添加另一次执行,则新的执行不会被执行。

注意:请注意,它在M2E 1.12的Eclipse 2019-06中仍然被打破(我写这个问题时不知道我一年多以前拥有哪个Eclipse)。

eclipse m2eclipse maven

5
推荐指数
0
解决办法
1134
查看次数

OSGi 中的 Apache POI 3.17

序言:我见过这个问题,但它显然是关于旧版本的 POI,从那时起 Apache 就违背了每个 Java 标准。

问题:我的目标是让 POI 与 OSGi 一起工作。到目前为止,我很确定这是不可能的,但也许你们中的一个人有一个好主意。到目前为止我尝试过的:

1) 捆绑 JAR

最简单的方法是将捆绑信息直接添加到 POI jars(另一个答案有关于如何做到这一点的详细信息)。这是行不通的,因为 JAR 导出相同的包,例如poi-3.17.jarpoi-ooxml-3.17.jar都导出org.apache.poi,这在 OSGi 中是不允许的(在标准 Java 中,最好的做法是也有单独的包)。

2)使用预先打包好的插件

我发现org.apache.servicemix.bundles.poi,它是由不了解 OSGi 工作原理的人创建的(也许是 Apache 人?)。它包含任何 JAR 中都不存在的不稳定依赖项,尤其是导入包org.junit让我担心。

我无法让它工作,因为并非所有必要的导入都是捆绑包。而且由于捆绑是如此明显破损,我很快就放弃了。

3) 使用带有 lib 文件夹的插件

很难找到正确的导入和导出包。最终这失败了,因为 POI JAR 导出标准包(如javax.xmlfrom xmlbeans)。

4) 将源文件复制到插件

这大概是我的最爱。当您将源代码复制到它们自己的插件中时,您会遇到编译错误。JAR poi-ooxml-3.17.jar需要一个名为org.etsi.uri.x01903.v13.SignaturePolicyIdType. 该类包含在poi-ooxml-schemas-3.17.jar 中,但令人不安的事实是它的名称是SignaturePolicyIdentifierType.

5)询问阿帕奇

有个问题“POI可以和OSGI一起使用吗?” 在常见问题解答中

从 POI 3.16 …

java osgi apache-poi

5
推荐指数
1
解决办法
1227
查看次数

标签 统计

java ×3

eclipse ×2

apache-poi ×1

eclipse-plugin ×1

jface ×1

m2eclipse ×1

maven ×1

osgi ×1