Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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 ProcessBuilder调试器Netbeans_Java_Debugging_Netbeans_Classnotfoundexception_Processbuilder - Fatal编程技术网

Java ProcessBuilder调试器Netbeans

Java ProcessBuilder调试器Netbeans,java,debugging,netbeans,classnotfoundexception,processbuilder,Java,Debugging,Netbeans,Classnotfoundexception,Processbuilder,我在JVM的更深层次及其调试功能方面遇到了问题。 我正在尝试使用ProcessBuilder启动一个单独的java程序,并让它与我的主进程通信。除非我添加命令,否则一切正常 “-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044” 给ProcessBuilder Class toExecute = ExampleSimulationController.class; String javaHome = System.

我在JVM的更深层次及其调试功能方面遇到了问题。 我正在尝试使用ProcessBuilder启动一个单独的java程序,并让它与我的主进程通信。除非我添加命令,否则一切正常

“-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044”

给ProcessBuilder

Class toExecute = ExampleSimulationController.class;
String javaHome = System.getProperty("java.home");
String javaBin = javaHome
        + File.separator + "bin"
        + File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = toExecute.getCanonicalName();

ProcessBuilder builder = new ProcessBuilder(javaBin, "-cp",
        "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044",
         classpath, className);
builder.redirectErrorStream(true);
在将此行添加到ProcessBuilder中时(旨在将调试功能添加到子流程中,如下所述,例如: 我在尝试阅读以下内容时遇到一个异常:

BufferedReader mainProcessConsoleOutput = new BufferedReader(new InputStreamReader(mainSimulation.getInputStream()));
Main Process: Exception in thread "main" java.lang.NoClassDefFoundError: /Users/...[path].../build/classes
Main Process: Caused by: java.lang.ClassNotFoundException: .Users.[same_Path].build.classes
Main Process:   at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
Main Process:   at java.security.AccessController.doPrivileged(Native Method)
Main Process:   at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
Main Process:   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main" java.lang.NullPointerException
at [PacketStructure].SimulationController.main(SimulationController.java:66)
再往下看:

if(!(line = mainProcessConsoleOutput.readLine()).equals("someText"))
例外情况如下:

BufferedReader mainProcessConsoleOutput = new BufferedReader(new InputStreamReader(mainSimulation.getInputStream()));
Main Process: Exception in thread "main" java.lang.NoClassDefFoundError: /Users/...[path].../build/classes
Main Process: Caused by: java.lang.ClassNotFoundException: .Users.[same_Path].build.classes
Main Process:   at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
Main Process:   at java.security.AccessController.doPrivileged(Native Method)
Main Process:   at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
Main Process:   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
Main Process:   at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main" java.lang.NullPointerException
at [PacketStructure].SimulationController.main(SimulationController.java:66)
我将Netbeans用作IDE,并了解“附加调试器”并为其提供与我传递给ProcessBuilder的命令中指定的端口相同的端口。但是,我不知道何时必须这样做-在子流程中指定断点之前?之后?到目前为止,我没有发现任何迹象表明我的子流程正在以任何方式与调试器通信

对我来说,令人怀疑的是,当我试图读取子流程的流时抛出异常,而不是更早的某个地方

我确实使用ObjectInputStream和ObjectOutputStream将序列化数据从一个进程传递到另一个进程,但由于我无法调试子进程,我不知道这是否是问题的潜在根源

我使用MacOs

由于这个问题的解决方案超出了我对Java魔法的了解,请帮助我解开这个谜团

谢谢


M

在花了很多时间试图解决问题后,我终于做到了:

ProcessBuilder builder = new ProcessBuilder(javaBin,"-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=n,suspend=y","-cp", classpath, className);
通过在“-agentlib”命令之后添加“-cp”命令,显然类路径与类名正确匹配

我应该知道命令传递的顺序很重要吗


Thx

在花了很多时间试图解决问题后,我终于做到了:

ProcessBuilder builder = new ProcessBuilder(javaBin,"-agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=n,suspend=y","-cp", classpath, className);
通过在“-agentlib”命令之后添加“-cp”命令,显然类路径与类名正确匹配

我应该知道命令传递的顺序很重要吗


Thx

类路径值必须紧跟在类路径参数之后。

类路径值必须紧跟在类路径参数之后