Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDI CommandLineLaunch未加载所需的类_Java_Debugging_Jdi - Fatal编程技术网

Java JDI CommandLineLaunch未加载所需的类

Java JDI CommandLineLaunch未加载所需的类,java,debugging,jdi,Java,Debugging,Jdi,我目前正在学习Java的JDI,我正在尝试启动一个运行所需程序的虚拟机,并与运行所需程序的已启动VM建立连接 为此,我使用了一个启动连接器(“com.sun.jdi.CommandLineLaunch”) 我为启动连接器提供以下参数: LaunchingConnector connector = findConnecter(); Map args = connector.defaultArguments(); //Main Arguments

我目前正在学习Java的JDI,我正在尝试启动一个运行所需程序的虚拟机,并与运行所需程序的已启动VM建立连接

为此,我使用了一个启动连接器(“com.sun.jdi.CommandLineLaunch”)

我为启动连接器提供以下参数:

        LaunchingConnector connector = findConnecter();
        Map args = connector.defaultArguments();

        //Main Arguments
        Connector.Argument mainArgs = (Connector.Argument)args.get("main");
        mainArgs.setValue("Main2");

        //Options Arguments
        Connector.Argument options = (Connector.Argument)args.get("options");
        options.setValue("-cp .");
然后使用
VirtualMachine vm=connector.launch(args)启动连接器。但是,当我打印使用以下代码片段加载的类列表时:

            List<ReferenceType> classes = vm.allClasses();
            for (int i = 0; i<classes.size(); i++){
                System.out.println(classes.get(i).name());
            }
List classes=vm.allClasses();

对于(int i=0;i主类最初没有加载,因为VM在加载之前挂起

为了获得正在加载的类的通知,您需要创建并启用“ClassPrepareRequest”。然后在事件到达时处理启动的VM的“EventQueue”。某些事件会导致VM挂起,因此必须在事件发生后调用VM.resume()

处理示例:

while (true) {
    //Waits forever for the next available event. Pauses here until something is available.
             EventSet eventSet = eventQ.remove();
             for(Event event: eventSet){
                       if(event instanceof ClassPrepareEvent){
                            ClassPrepareEvent classPrepareEvent = (ClassPrepareEvent)event;
                            ReferenceType refType = classPrepareEvent.referenceType();
                            System.out.println("---"+refType.name() + " loaded.");
                        }
               vm.resume()
             }
}