0

我有两个项目——try.java 和另一个.java。我想从 try.java 运行另一个 java

这是我的 another.java 代码

package another;

public class Another {

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

这是try.java的mycode

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();
    }
}
}

运行 Try.java 后它没有打印任何东西。它只是在netbeans中成功打印构建。但是已经创建了一个类 Another.cass

谁能帮我?

4

3 回答 3

0

看起来Another.java不在您运行代码的目录中。特别是,您设法同时调用javacand java,看起来两者都在接收您指定的参数 - 但它找不到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

于 2013-05-03T05:56:15.750 回答
0

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

public static void main(String[] args) 
{
   try 
   {
     runProcess("javac Another.java");
     runProcess("java Another");
   }
   catch (Exception e) 
   {
     e.printStackTrace();
   }
}
于 2013-05-03T05:57:22.387 回答
0

这样做怎么样:

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

有没有可能这样工作?

于 2013-05-05T11:44:15.423 回答