ERROR: JDWP Unable to get JNI 1.2 environment

Java调试错误解析
本文记录了一个在使用Java调试过程中遇到的错误:AGENT_ERROR_NO_JNI_ENV,并提供了复现步骤及可能的原因。此错误与JVM关闭时调试代理仍在运行有关。

调试代码时突然出现这个error,最终结果是这是一个没有解决的bug

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6476706

JDK-6476706 : Error AGENT_ERROR_NO_JNI_ENV printed sometimes to console when JVM finishes

 

The following error is printed to console when debugger is about to finish:

ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:820]

It was found by other people as well:

http://www.google.co.uk/search?hl=en&q=AGENT_ERROR_NO_JNI_ENV%28183%29++util.c%3A820&btnG=Google+Search&meta

I am able to reproduce it with NetBeans IDE (http://www.netbeans.org/issues/show_bug.cgi?id=85538):

- install NetBeans IDE 6.0
- create a java project
- add two lines to main method (System.out.println("aaa");System.out.println("bbb");)
- add breakpoint to the first line
- start debugger (F5)
- continue when it stops at breakpoint. The error message above is SOMETIMES
printed to output window.

Build NB 6.0 20060919-0644, JDK1.6.0-b99, WindowsXP.
An e-mail comment from Alan:

> It sounds like a timing issue in the shutdown with the agent still running.

这个bug可能再次运行就不能复现了,或者实在难以忍受error提示用system.exit(0).

package org.找车位; import com.sun.xml.internal.ws.util.QNameMap; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class test { /* 有 n 辆汽车去停车场找车位,这些汽车从0开始依次编号。 停车场里有无数个车位,也从0开始依次编号。当一辆汽车到达停车场时,会停在编号最小且空闲的车位。 比方说,当一辆汽车到达时,如果车位 0 ,1 和 5 被占据了,那么它会停在 2 号车位。 当一辆汽车离开停车场时,这个车位会立刻释放变成空闲状态;如果同一时刻有另一辆汽车到达,且该车位满足”编号最小且空闲”条件,则新来车辆可以立即停在这个车位。 给你汽车数量n和它们到达和离开的时刻,所有汽车到达时刻互不相同。 请你返回目标编号汽车所停的车位编号。 输入 输入有两行 第一行表示汽车数量n和目标汽车编号 第二行表示所有汽车到达和离开的时刻,共有2n个值,比如如下输入表示有三辆汽车,编号为0的汽车到达时刻为1,离开时刻为4;编号为1的汽车到达时刻为2,离开时刻为3;编号为2的汽车到达时刻为4,离开时刻为6 3 1 1 4 2 3 4 6 输出 目标编号汽车所停的车位编号 */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入汽车的数量 int n = scanner.nextInt(); //目标汽车编号 int y = scanner.nextInt(); //汽车所在车位 HashMap<Integer, HashMap<Integer, Integer>> Car_position = new HashMap<>(); HashMap<Integer, Integer> parkState = new HashMap<>(); // 定义一个长度为10000的数组,表示10000个车位 int[] park = new int[n]; // 输入n行,每行两个数,分别表示汽车的到达和离开时刻 for (int i = 0; i < n; i++) { //i为汽车编号 int in = scanner.nextInt(); int out = scanner.nextInt(); // InAndOut.put(i,new HashMap<>(in,out)); for (int j=0;j<park.length;j++){ //j为车位编号 if (park[j]==0){ if (Car_position.get(j)==null) { Car_position.put(j,new HashMap<>(i,out)); parkState.put(i,j); park[j]=1; i++; break; } // PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(); }else if (Car_position.get(j).get(CarByPark(parkState,j))>out){ Car_position.put(j,new HashMap<>(i,out)); parkState.put(i,j); i++; break; } } } System.out.println("目标汽车车位号为"+ y + "停车场编号为"+parkState.get(y)); } static Integer CarByPark(HashMap<Integer, Integer> map, int y){ // 存储匹配的键 Integer p = null; for (Map.Entry<Integer, Integer> entry : map.entrySet()) { if (entry.getValue().equals(y)) { p=entry.getKey(); } } return p; } } 报错C:\dev\jdk1.8.0_332\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:56884,suspend=y,server=n -javaagent:C:\Users\yWX1446235\AppData\Local\JetBrains\IntelliJIdea2024.3\captureAgent\debugger-agent.jar -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dkotlinx.coroutines.debug.enable.flows.stack.trace=true -Dkotlinx.coroutines.debug.enable.mutable.state.flows.stack.trace=true -Dfile.encoding=UTF-8 -classpath "C:\dev\jdk1.8.0_332\jre\lib\charsets.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\access-bridge-64.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\cldrdata.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\dnsns.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\jaccess.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\jfxrt.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\localedata.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\nashorn.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\sunec.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\sunjce_provider.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\sunmscapi.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\sunpkcs11.jar;C:\dev\jdk1.8.0_332\jre\lib\ext\zipfs.jar;C:\dev\jdk1.8.0_332\jre\lib\jce.jar;C:\dev\jdk1.8.0_332\jre\lib\jfr.jar;C:\dev\jdk1.8.0_332\jre\lib\jfxswt.jar;C:\dev\jdk1.8.0_332\jre\lib\jsse.jar;C:\dev\jdk1.8.0_332\jre\lib\management-agent.jar;C:\dev\jdk1.8.0_332\jre\lib\resources.jar;C:\dev\jdk1.8.0_332\jre\lib\rt.jar;D:\dev\oj\test\Oj\target\classes;C:\dev\IntelliJ IDEA 2024.3.2.2\lib\idea_rt.jar" org.找车位.test Connected to the target VM, address: '127.0.0.1:56884', transport: 'socket' 3 1 1 4 2 3 4 6Exception in thread "main" java.lang.NullPointerException at org.找车位.test.main(test.java:58) ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [util.c:840] Disconnected from the target VM, address: '127.0.0.1:56884', transport: 'socket' Process finished with exit code 1
最新发布
11-01
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值