使用Java ServiceLoader会导致NoSuchElementException错误

卡尔曼

我的类DoFindMiddleService扩展了抽象类DoFindMiddle。这是DoFindMiddle类:

public abstract class DoFindMiddle<T extends Comparable<T>> {
   public abstract ListItem<T> findMiddle(ListItem<T> paramListItem);
   public static <D extends Comparable<D>> DoFindMiddle<D> newInstance() {
     return (DoFindMiddle)ServiceLoader.load(DoFindMiddle.class).iterator().next();
   }
}

这是DoFindMiddleService类的第一部分:

package com.nng.interview.homework.applicant.kovacskalman;

import com.nng.interview.homework.exercise.DoFindMiddle;
import java.util.Iterator;
import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;

public class DoFindMiddleService<T extends Comparable<T>> extends DoFindMiddle<T> {

public static DoFindMiddle service;
public volatile ServiceLoader<DoFindMiddleService> loader;
public DoFindMiddleService() {
    loader = ServiceLoader.load(DoFindMiddleService.class);
}
public static synchronized DoFindMiddle getInstance() {
    if (service == null) {
        service = new DoFindMiddleService();
    }
    return service;
}
public String getDefinition(String word) {
    String definition = null;

    try {
        Iterator<DoFindMiddleService> dictionaries = loader.iterator();
        while (definition == null && dictionaries.hasNext()) {
            DoFindMiddleService d = dictionaries.next();
            definition = d.getDefinition(word);
        }
    } catch (ServiceConfigurationError serviceError) {
        definition = null;
        serviceError.printStackTrace();

    }
    return definition;
}

.....
}

如果我在单元测试中尝试以下操作:

final DoFindMiddle<Integer> instance = new DoFindMiddleService();

然后就可以了。但是当我尝试单元测试时:

final DoFindMiddle<Integer> instance = DoFindMiddle.newInstance();

然后,它导致NoSuchElementException错误。我的错是什么?

我的pom.xml是以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nng.interview.homework.applicant</groupId>
    <name>Kovács Kálmán</name>
    <artifactId>kovacskalman</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.nng.interview.homework</groupId>
            <artifactId>comnnginterviewhomework</artifactId>
            <version>1.0.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.hamcrest</groupId>
                    <artifactId>hamcrest-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
</project>

当我尝试执行时,出现以下错误:

d:\kovacskalman>mvn exec:java -Dexec.mainClass="com.nng.interview.homework.appli
cant.kovacskalman.App"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Kovacs Kalman 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ kovacskalman ---
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment
on MEXEC-6.
[WARNING]
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.util.NoSuchElementException
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:357)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
        at com.nng.interview.homework.exercise.DoFindMiddle.newInstance(DoFindMi
ddle.java:52)
        at com.nng.interview.homework.applicant.kovacskalman.App.<init>(App.java
:9)
        at com.nng.interview.homework.applicant.kovacskalman.App.main(App.java:1
3)
        ... 6 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.076 s
[INFO] Finished at: 2014-11-01T15:19:51+01:00
[INFO] Final Memory: 9M/96M
卡尔曼

我必须将Jar META-INF / services / com.nng.interview.homework.exercise.DoFindMiddle命名文件放入其中,该文件仅包含一行:com.nng.interview.homework.applicant.kovacskalman.DoFindMiddleService#标准服务提供商

让我们看一下Jar文件规范服务提供者部分:

https://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Service_Provider

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

Java:在PreparedStatement中填充SQLite参数会导致错误

来自分类Dev

使用copy属性会导致分段错误

来自分类Dev

在aspx中使用ashx上传文件会导致超时错误

来自分类Dev

Delphi-使用OLE会导致Word错误

来自分类Dev

使用GraphDiff更新多对多关系会导致错误

来自分类Dev

对休眠的应用程序使用@Transactional注释会导致错误

来自分类Dev

从其他路径使用BatchScript的Runnig VBScript会导致错误

来自分类Dev

在客户端使用Ref.create()会导致错误

来自分类Dev

在文件中搜索单词会导致java.util.NoSuchElementException

来自分类Dev

使用BigDecimal会导致计算中出现轻微错误

来自分类Dev

使用pip升级到numba 0.16会导致错误

来自分类Dev

从OSX“ .app”捆绑包运行Java会导致“错误-10810”

来自分类Dev

Bash使用超时将输出写入文件会导致错误

来自分类Dev

使用别名引用匿名结构会导致错误

来自分类Dev

gulp-git:使用push会导致流错误

来自分类Dev

使用TypeScript装饰器会导致错误

来自分类Dev

在结构中使用枚举会导致“无法解析的名称”错误

来自分类Dev

使用RMagick从https读取pdf会导致未经授权的错误

来自分类Dev

使用逗号会导致语法错误

来自分类Dev

使用pip安装tensorflow会导致错误

来自分类Dev

使用IntStream会导致某些数组元素被错误地设置为零(JVM Bug,Java 11)

来自分类Dev

使用复制属性会导致分段错误

来自分类Dev

对主机使用free会导致分段错误

来自分类Dev

从OSX“ .app”捆绑包运行Java会导致“错误-10810”

来自分类Dev

Java 8,在流中使用.parallel会导致OOM错误

来自分类Dev

使用java.io.DataInputStream读取二进制文件会导致错误的值

来自分类Dev

进行优先级队列会导致Java错误

来自分类Dev

使用“和*”移动文件会导致错误

来自分类Dev

在belongsTo 上使用withDefault() 会导致错误

Related 相关文章

  1. 1

    Java:在PreparedStatement中填充SQLite参数会导致错误

  2. 2

    使用copy属性会导致分段错误

  3. 3

    在aspx中使用ashx上传文件会导致超时错误

  4. 4

    Delphi-使用OLE会导致Word错误

  5. 5

    使用GraphDiff更新多对多关系会导致错误

  6. 6

    对休眠的应用程序使用@Transactional注释会导致错误

  7. 7

    从其他路径使用BatchScript的Runnig VBScript会导致错误

  8. 8

    在客户端使用Ref.create()会导致错误

  9. 9

    在文件中搜索单词会导致java.util.NoSuchElementException

  10. 10

    使用BigDecimal会导致计算中出现轻微错误

  11. 11

    使用pip升级到numba 0.16会导致错误

  12. 12

    从OSX“ .app”捆绑包运行Java会导致“错误-10810”

  13. 13

    Bash使用超时将输出写入文件会导致错误

  14. 14

    使用别名引用匿名结构会导致错误

  15. 15

    gulp-git:使用push会导致流错误

  16. 16

    使用TypeScript装饰器会导致错误

  17. 17

    在结构中使用枚举会导致“无法解析的名称”错误

  18. 18

    使用RMagick从https读取pdf会导致未经授权的错误

  19. 19

    使用逗号会导致语法错误

  20. 20

    使用pip安装tensorflow会导致错误

  21. 21

    使用IntStream会导致某些数组元素被错误地设置为零(JVM Bug,Java 11)

  22. 22

    使用复制属性会导致分段错误

  23. 23

    对主机使用free会导致分段错误

  24. 24

    从OSX“ .app”捆绑包运行Java会导致“错误-10810”

  25. 25

    Java 8,在流中使用.parallel会导致OOM错误

  26. 26

    使用java.io.DataInputStream读取二进制文件会导致错误的值

  27. 27

    进行优先级队列会导致Java错误

  28. 28

    使用“和*”移动文件会导致错误

  29. 29

    在belongsTo 上使用withDefault() 会导致错误

热门标签

归档