java - 我不明白为什么会抛出这个 ClassNotFoundException

标签 java exception

我正在从我的一个类执行 java 二进制文件,并且抛出了 ClassNotFoundException:


Results of executing:/usr/bin/java -classpath "/home/geo" Geoline
Error stream:
Exception in thread "main" java.lang.NoClassDefFoundError: Geoline
Caused by: java.lang.ClassNotFoundException: Geoline
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
Could not find the main class: Geoline. Program will exit.
Output stream:

Geoline 类位于/home/geo/Geoline.java。问题是,无论我位于文件系统的哪个位置,如果我手动执行相同的命令,都会执行该类。为什么使用 Runtime.getRuntime().exec 执行二进制文件时没有发生同样的事情?

编辑:这是使用详细标志生成的输出:pastie link 编辑:这是文件的内容:


public class Geoline {
    public static void main(String[] args) {
        System.out.println("blabla");
    }
}

最佳答案

很难判断发生了什么,因为您没有发布代码。

然而,这是我最有根据的猜测。

您尝试将整个命令运行到 java String 中,而 java 解释器无法将它们识别为不同的参数。

尝试将它们全部打包在String[]

所以而不是

Runtime.getRuntime().execute("/usr/bin/java -classpath \"/home/geo\" Geoline");

尝试:

Runtime.getRuntime().execute( new String[]{
               "/usr/bin/java","-classpath","/home/geo","Geoline"
});

或者,您可以发布您的实际代码,我们可以看看发生了什么。

编辑

这是我的尝试。我创建了 RunIt.java 类,它基本上是我建议的 Runtime.execHello.java ,它几乎表示 Hello +参数[0]

这是输出:

$cat RunIt.java 
import java.io.*;

public class RunIt{ 
    public static void main( String [] args ) throws IOException  {
        Process p = Runtime.getRuntime().exec(  args );
        BufferedReader reader = new BufferedReader( new InputStreamReader ( p.getInputStream() ) );
        String line = null;

        while( ( line = reader.readLine() ) != null ) {
            System.out.println( line );
        }
        reader.close();
    }
}
$cat Hello.java 
public class Hello { 
    public static void main( String [] args ) {
        System.out.println("Hola: " +  ( args.length > 0 ?  args[0] : " a nadie" ) );
    }
}
$javac RunIt.java 
$java RunIt javac Hello.java 
$java RunIt java Hello Mundo
Hola: Mundo
$

关于java - 我不明白为什么会抛出这个 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1080578/

相关文章:

java - 如何更改通知的内容而不重新创建它?

eclipse - org.codehaus.groovy.control.MultipleCompilationErrorsException : startup failed: Script7. groovy:1:无法解析类

logging - 为什么 "log and throw"被视为反模式?

delphi - Dll 在 Delphi 10.2 中崩溃,但仅在 Debug模式下崩溃

java - File file = new File () 的路径错误

java - 将此 json 映射到 java 对象 (pojo)

java - 如何在多个应用程序上管理多个数据源

java - 从数组中删除重复的字符串?

apache-spark - 使用 pyspark 读取 Elasticsearch 失败,异常 java.lang.NoClassDefFoundError : org/apache/commons/httpclient/protocol/ProtocolSocketFactory

c# - 如何获取引发 UnauthorizedAccessException 的路径?