Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 我不知道';我不理解为什么会抛出此ClassNotFoundException_Java_Exception - Fatal编程技术网

Java 我不知道';我不理解为什么会抛出此ClassNotFoundException

Java 我不知道';我不理解为什么会抛出此ClassNotFoundException,java,exception,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

我正在从我的一个类执行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执行二进制文件时不会发生同样的情况

编辑:下面是使用以下选项上的verbose标志生成的输出: 编辑:以下是文件的内容:


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

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

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

您试图将整个命令运行到一个java字符串中,而java解释器没有将它们识别为不同的参数

尝试将它们全部打包到一个字符串[]

所以不是

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.exec和Hello.java类,基本上是Hello+args[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
$

您可能需要阅读以下内容:

不确定您的系统是什么,但Runtime.exec与shell不同:请尝试在类路径周围不使用“环绕”

/usr/bin/java -classpath /home/geo Geoline
(或将exec与数组参数一起使用)
我假设您的类文件是/home/geo/Geoline。class

编辑:如果尝试使用标准输出重定向“dosomething>somefile”
Runtime.exec也无法识别这一点


[]

为什么要引用.java文件?我不想问一个“愚蠢”的问题,但你是否将其编译成了.class文件?路径/home/geo/Geoline.class所在的目录是否在类路径中?是的,它已编译。编译发生在运行操作之前。是不是-CLASSPATH”/home/geo“在类路径中加载它?类是否有包?”?如果是,则包的根所在的目录必须位于类路径中。如果没有,请添加一个。没有包的类是微不足道的。该类不属于包。在这种情况下,/home/geo不是很好的目录吗?以防万一,启用-verbose选项,看看这篇文章有没有什么奇怪的地方?我从来都不想看,但它的日期是2000年。也许事情已经解决了。在Java1.5中,一个新类被添加到JRE中:我不知道它是否能够修复文章中所说的任何内容。您有摘要吗?告诉您使用Runtime.exec()时的陷阱。Vintage 2000,但仍然值得知道,因为从那时起运行时并没有发生任何变化。