【问题标题】:NoSuchMethodError - no static method comparing (java/util/Comparator)NoSuchMethodError - 没有静态方法比较 (java/util/Comparator)
【发布时间】:2017-03-22 10:34:24
【问题描述】:

我正在 Android 设备上使用 Gluon 从 java.util 中排序 List。即使分配了 8GB,应用程序也没有为 iOS 编译(内存不足),但这是另一个问题。

classpath 'org.javafxports:jfxmobile-plugin:1.3.4'

compile 'com.gluonhq:charm:4.3.2'

jfxmobile version = '3.2.4'

导致崩溃的这一行:

highscoreList.sort(comparing(Highscore::getScore).reversed()); //#89

03-22 09:42:14.709 27312 27337 E AndroidRuntime: FATAL EXCEPTION: JavaFX Application Thread
03-22 09:42:14.709 27312 27337 E AndroidRuntime: Process: com.x.pacman, PID: 27312
03-22 09:42:14.709 27312 27337 E AndroidRuntime: java.lang.NoSuchMethodError: No static method comparing(Ljava/util/function/Function;)Ljava/util/Comparator; in class Ljava/util/Comparator; or its super classes (declaration of 'java.util.Comparator' appears in /system/framework/core-libart.jar)
03-22 09:42:14.709 27312 27337 E AndroidRuntime:        at com.x.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:89)

我开始搜索并找到this post about NoSuchMethodError,所以我尝试执行以下操作,但可惜它仍然崩溃,现在我没有想法了:

Comparator<Highscore> comparator = new Comparator<Highscore>() {
    @Override
    public int compare(Highscore highscore1, Highscore highscore2) {
        return highscore1.getScore() - highscore2.getScore();
    }
};

highscoreList.sort(comparator); //#97


03-22 11:30:48.836 16547 16570 E AndroidRuntime: java.lang.NoSuchMethodError: No interface method sort(Ljava/util/Comparator;)V in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /system/framework/core-libart.jar)
03-22 11:30:48.836 16547 16570 E AndroidRuntime:        at com.kaufland.pacman.HighscoreUtil.readHighscoreList(HighscoreUtil.java:97)

【问题讨论】:

    标签: java android gluon-mobile


    【解决方案1】:

    Comparator#comparing()List#sort(Comparator) 均已添加到 API 级别 24,您的设备可能运行的 API 级别较低。

    使用自 API 级别 1 以来一直存在的 Collections#sort() 可能会更好。

    【讨论】:

    • Collections.sort(highscoreList, (highscore1, highscore2) -&gt; highscore2.getScore() - highscore1.getScore()); 解决了这个问题,谢谢!
    【解决方案2】:

    仅供参考。使用http://www.vavr.io/ 集合时出现此错误。

    我调用了LinkedHashSet 的函数toSortedSet()。此函数尝试调用需要 API 级别 24 的 Comparator.naturalOrder()

    如果您必须使用较低的 API 级别,只需使用重载的 toSortedSet(Comparator) 函数并传递合适的比较器即可。

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多