Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用japt在Java13无法运行 java.lang.VerifyError: Bad type on operand stack #60

Closed
45gfg9 opened this issue Feb 17, 2020 · 3 comments
Assignees
Labels
M 优先级: 主要

Comments

@45gfg9
Copy link

45gfg9 commented Feb 17, 2020

OS:macOS 10.14.6
JDK版本:13.0.2
gradle版本:6.1.1

代码基于README中给出的示例代码

package net.im45.nologin;

import net.mamoe.mirai.japt.BlockingBot;
import net.mamoe.mirai.japt.BlockingContacts;
import net.mamoe.mirai.japt.BlockingQQ;
import net.mamoe.mirai.japt.Events;
import net.mamoe.mirai.message.GroupMessage;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        final String filename = "credential.txt";
        long id;
        String password;

        try (BufferedReader prd = new BufferedReader(new FileReader(filename))) {
            id = Long.parseLong(prd.readLine());
            password = prd.readLine();
        } catch (IOException exc) {
            System.out.println("Cannot open file: " + filename);
            exc.printStackTrace();
            return;
        }

        BlockingBot bot = BlockingBot.newInstance(id, password);

        bot.login();

        bot.getFriendList().forEach(friend -> System.out.println(friend.getNick()));

        Events.subscribeAlways(GroupMessage.class, (GroupMessage message) -> {
            final BlockingQQ sender = BlockingContacts.createBlocking(message.getSender());

//            sender.sendMessage("Hello");
        });

        Thread.sleep(999999999);
    }
}

报错:

> Task :Test.main() FAILED
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    net/mamoe/mirai/event/internal/EventListenerManager.get$mirai_core(Lkotlin/reflect/KClass;)Lnet/mamoe/mirai/event/internal/EventListeners; @205: putfield
  Reason:
    Type 'net/mamoe/mirai/event/internal/EventListenerManagerLockRefVolatile' (current frame, stack[1]) is not assignable to integer
  Current Frame:
    bci: @205
    flags: { }
    locals: { 'net/mamoe/mirai/event/internal/EventListenerManager', 'kotlin/reflect/KClass', 'net/mamoe/mirai/event/internal/EventListenerManager$Registry', integer, 'net/mamoe/mirai/utils/Node' }
    stack: { integer, 'net/mamoe/mirai/event/internal/EventListenerManagerLockRefVolatile' }
  Bytecode:
    0000000: 2b12 17b8 001d b200 1f4d 033e 2cb6 0025
    0000010: c000 273a 0400 1904 2cb6 002b a600 06a7
    0000020: 0085 1904 3a05 0336 0619 053a 0703 3608
    0000030: 1907 3a09 0336 0a19 09c1 002d 9a00 1e19
    0000040: 073a 0903 360a 1909 c100 2f9a 000f 1907
    0000050: b800 359a 0007 04a7 0004 039a 0006 a700
    0000060: 3c19 05b6 0039 3a07 1907 c600 3019 07c0
    0000070: 0007 3a0b 0336 0c19 0bb6 003d 2bb8 0041
    0000080: 9900 1719 0bb6 0045 59c7 000d bb00 4759
    0000090: 1249 b700 4dbf b0a7 0003 1904 b600 513a
    00000a0: 04a7 ff74 b200 53b2 0055 0304 b600 5b99
    00000b0: 0034 bb00 0759 2bbb 005d 59b7 0060 b700
    00000c0: 634d b200 1f2c b600 6703 b200 55b5 006d
    00000d0: 2cb6 0045 59c7 000d bb00 4759 1249 b700
    00000e0: 4dbf b0a7 ff1d                         
  Stackmap Table:
    same_frame(@0)
    append_frame(@21,Object[#33],Integer,Object[#39])
    same_frame(@34)
    full_frame(@90,{Object[#2],Object[#131],Object[#33],Integer,Object[#39],Object[#39],Integer,Object[#39],Integer,Object[#39],Integer},{})
    same_locals_1_stack_item_frame(@91,Integer)
    same_frame(@97)
    full_frame(@150,{Object[#2],Object[#131],Object[#33],Integer,Object[#39],Object[#39],Integer,Object[#4],Integer,Object[#39],Integer,Object[#7],Integer},{Object[#93]})
    same_frame(@151)
    chop_frame(@154,2)
    full_frame(@164,{Object[#2],Object[#131],Object[#33],Integer,Object[#39]},{})
    full_frame(@226,{Object[#2],Object[#131],Object[#7],Integer,Object[#39]},{Object[#93]})
    full_frame(@227,{Object[#2],Object[#131],Object[#33],Integer,Object[#39]},{})

	at net.mamoe.mirai.event.internal.InternalEventListenersKt.listeners(InternalEventListeners.kt:78)
	at net.mamoe.mirai.event.internal.InternalEventListenersKt.subscribeInternal(InternalEventListeners.kt:29)
	at net.mamoe.mirai.BotImpl.<init>(BotImpl.kt:198)
	at net.mamoe.mirai.qqandroid.QQAndroidBotBase.<init>(QQAndroidBot.kt:46)
	at net.mamoe.mirai.qqandroid.QQAndroidBot.<init>(QQAndroidBot.kt:27)
	at net.mamoe.mirai.qqandroid.QQAndroid.Bot(QQAndroid.kt:28)
	at net.mamoe.mirai.BotFactoryJvmKt.Bot(BotFactoryJvm.kt:63)
	at net.mamoe.mirai.BotFactoryJvmKt.Bot$default(BotFactoryJvm.kt:62)
	at net.mamoe.mirai.BotFactoryJvmKt.Bot(BotFactoryJvm.kt)
	at net.mamoe.mirai.japt.BlockingBot.newInstance(BlockingBot.java:40)
	at net.im45.nologin.Test.main(Test.java:28)

Execution failed for task ':Test.main()'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

build.gradle

plugins {
    id 'java'
}

group 'net.im45.nologin'
version '0.1-SNAPSHOT'

sourceCompatibility = 13
targetCompatibility = 13

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    implementation "net.mamoe:mirai-core-qqandroid-jvm:0.15.1"
    implementation "net.mamoe:mirai-japt:1.0.0"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
@Him188 Him188 added the M 优先级: 主要 label Feb 17, 2020
@Him188 Him188 self-assigned this Feb 17, 2020
@PopSlime
Copy link

此问题由编译器bug导致,已验证可以通过修改class文件进行修复。
修复方法:
将EventListenerManager.class文件的0x0E7C到0x0E7F四个字节修改为B5 00 6D 2C。

@45gfg9
Copy link
Author

45gfg9 commented Feb 17, 2020

草 是编译器bug
是不是可以向Oracle提交bug了

@Him188
Copy link
Member

Him188 commented Feb 17, 2020

是Kotlin编译器bug,这是日常

@Him188 Him188 closed this as completed in d4fdeee Feb 18, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
M 优先级: 主要
Projects
None yet
Development

No branches or pull requests

3 participants