2013-05-03 87 views
0

我有两个projects-try.java和another.java。我想从try.java无法运行另一个java项目

再跑,JAVA这里是我的another.java

package another; 

public class Another { 

    public static void main(String[] args) 
    { 
     System.out.println("Another Java Project"); 
    } 
} 

代码这里是mycode的用于try.java

package pkgtry; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

public class Try 
{ 
    private static void printLines(String name, InputStream ins) throws Exception { 
    String line = null; 
    BufferedReader in = new BufferedReader(new InputStreamReader(ins)); 
    while ((line = in.readLine()) != null) 
    { 
     System.out.println(name + " " + line); 
    } 
} 

private static void runProcess(String command) throws Exception 
{ 
    Process pro = Runtime.getRuntime().exec(command); 
    printLines(command + " stdout:", pro.getInputStream()); 
    printLines(command + " stderr:", pro.getErrorStream()); 
    pro.waitFor(); 
    System.out.println(command + " exitValue() " + pro.exitValue()); 
} 

public static void main(String[] args) 
{ 
    try 
    { 
     runProcess("javac C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry\\Another.java"); 
    runProcess("java C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry\\Another"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

运行尝试后。 java它没有打印任何东西。它只是在netbeans上打印成功。但一类Another.cass已创建

任何人都可以帮我吗?

+1

您需要将Another.java目录添加到您的类路径中,或将完全限定的路径预先添加到Another.java。 – 2013-05-03 05:51:59

+0

@HarshalPandya:编译器不会查找类路径中命令行上指定的* source *文件。 – 2013-05-03 05:56:35

+0

@JonSkeet:当然,那是非常真实的。类路径是一个愚蠢的建议。 – 2013-05-03 12:21:11

回答

0

它看起来像Another.java不在您运行代码的目录中。特别是,你管理调用javacjava,它看起来像都收到你指定的参数 - 但它找不到Another.java

此外,您需要提供的完全限定类名java,在这种情况下是another.Another,因为它是在another包。这也意味着你需要以这样一种方式编译它,将类文件保存在适当的目录结构中。

所以你想要的东西,如:

runProcess("javac -d . path/to/Another.java"); 
runProcess("java another.Another"); 

(其中path/to/Another.java或者是一个绝对的文件名或一个相对于工作目录。)

-d .会告诉javac建立植根于一个目录结构输出文件的当前工作目录。

编辑:现在我们知道你正在运行,你可以使用:

runProcess("javac -d . src/pkgtry/Another.java"); 
runProcess("java another.Another"); 

请注意,您应该保持你的源文件夹中的组织结构相匹配的封装结构,所以它应该是在一个名为another的目录中,而不是pkgtry

+0

没有亚尔。它不工作。运行后我得到了相同的结果 – gela 2013-05-03 06:18:48

+0

@gela:然后你没有正确指定'Another.java'的路径。不幸的是,您还没有告诉我们任何关于您如何运行代码的信息,这很难帮助您。您可能想要将当前目录转储到控制台以查看您正在运行的位置:System.out.println(new File(“。”)。getAbsolutePath())' – 2013-05-03 06:20:35

+0

当我运行System.out.println(new File(“。”)。getAbsolutePath())在Try .java中给出C:\ Users \ owner \ Documents \ NetBeansProjects \ try \。 – gela 2013-05-05 09:14:29

0

java编译器试图找到包pkgtry中的Another.java文件。如果你把这两个文件放在一个包中,那么你将能够达到预期的效果。

public static void main(String[] args) 
{ 
    try 
    { 
    runProcess("javac Another.java"); 
    runProcess("java Another"); 
    } 
    catch (Exception e) 
    { 
    e.printStackTrace(); 
    } 
} 
+0

不,它试图在任何运行进程的地方找到'Another.java' - 这是我们不知道的。 – 2013-05-03 06:00:29

+0

您应该添加一个单独的代码块来查找Another.java文件,然后在此处提供完整的路径。 – Joshi 2013-05-03 06:02:27

+0

public static void main(String [] args){ 尝试runProcess(“javac C:/Users/owner/Documents/NetBeansProjects/another/src/another/Another.java”); runProcess(“java C:/ Users/owner/Documents/NetBeansProjects/another/src/another/Another”); (例外e){ e.printStackTrace(); } } – gela 2013-05-03 06:09:42

0

什么做这样的:

try 
    { 
    runProcess("cd C:\\Users\\owner\\Documents\\NetBeansProjects\\try\\src\\pkgtry); 
    runProcess("javac Another.java"); 
    runProcess("java Another"); 
    } 

是否有任何机会,它可能工作方式?

+0

我在runProcess(“cd C:\\ Users \\ owner \\ Documents \\ NetBeansProjects \\ try \\ src \\ pkgtry)行中收到错误; – gela 2013-05-08 08:22:34

+0

错误是什么? – sha1 2013-05-08 09:41:27