【问题标题】:how to run class java use runtime.exec()?如何运行类 java 使用 runtime.exec()?
【发布时间】:2014-03-19 02:39:27
【问题描述】:

我必须通过另一个程序 java 使用 runtime.exec() 运行一个类 java。 文件夹中的一个类与我的程序不同,所以我无法运行它。 我使用(java -cp“目录”类)但是我的类有导入文件,所以它不能找到文件? 谁能帮帮我?

Process pro = Runtime.getRuntime().exec("java -cp \"E:\DA_Laptrinhmang\"NguyenTo");

这是程序:

import java.io.*;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
public class TestCodeJava {
  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);
    BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
    pro.waitFor();
    String line = "";
    while((line = reader.readLine())!=null)
    {
        System.out.println(line);
    }
  }
  private static int toCompile(String fileToCompile)
  {
      JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
      int compilationResult = compiler.run(null,  null, null, "-verbose", fileToCompile);
      return compilationResult;
  }
  public static void main(String[] args) {
    try {
      if(toCompile("E:\\Folder\\Prime.java")==0)
      {
         runProcess("java -cp \"E:\\Folder\" Prime");
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

    import java.io.*;
    public class Prime {
    private static boolean isPrime(int n)
    {
        if(n <= 1) return false;
        if(n == 2 || n == 3) return true;
        int m = (int) Math.sqrt(n);
        for(int i = 5; i <= m; i = i + 5)
            if(n % i == 0 || n % (i+2) == 0) return false;
        return true;
    }
    public static void main(String args[]) throws FileNotFoundException, IOException
    {
        File file = new File("INPUT.TXT");
        FileInputStream fis = new FileInputStream(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
        int n = Integer.parseInt(reader.readLine());
        File file2 = new File("OUTPUT.TXT");
        FileOutputStream fos = new FileOutputStream(file2);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos));
        if(isPrime(n))
        {
            writer.write("YES");
        }else writer.write("NO");
        writer.flush();
        writer.close();
    }
}

这里是错误: [解析开始RegularFileObject[E:\DA_Laptrinhmang\NguyenTo.java]] [解析完成42ms] [源文件的搜索路径:C:\Users\QUANG HUY\Documents\NetBeansProjects\ChamDiemJava\build\classes,C:\Users\QUANG HUY\Documents\NetBeansProjects\ChamDiemJava\src] 【类文件搜索路径:C:\Program Files\Java\jdk1.7.0\jre\lib\resources.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\rt.jar,C:\ Program Files\Java\jdk1.7.0\jre\lib\sunrsasign.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\jsse.jar,C:\Program Files\Java\jdk1.7.0\jre \lib\jce.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\charsets.jar,C:\Program Files\Java\jdk1.7.0\jre\classes,C:\Program Files\Java \jdk1.7.0\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk1.7.0\jre \lib\ext\sunec.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\ext\sunmscapi .jar,C:\Program Files\Java\jdk1.7.0\jre\lib\ext\sunpkcs11.jar,C:\Program Files\Java\jdk1.7.0\jre\lib\ext\zipfs.jar,C:\ Users\QUANG HUY\Documents\NetBeansProjects\ChamDiemJava\build\classes,C:\Users\QUANG HUY\Documents\NetBeansProjects\ChamDiemJava\src] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/FileNotFoundException.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/IOException.class)]] [检查阮托] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Au​​toCloseable.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Math.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Exception.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Throwable.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/File.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/net/URI.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/FileInputStream.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/FileDescriptor.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/BufferedReader.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/InputStreamReader.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/InputStream.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/Reader.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Integer.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Number.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/FileOutputStream.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/BufferedWriter.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/OutputStreamWriter.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/OutputStream.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/io/Writer.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Error.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/RuntimeException.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/NumberFormatException.class)]] [加载 ZipFileIndexFileObject[C:\Program Files\Java\jdk1.7.0\lib\ct.sym(META-INF/sym/rt.jar/java/lang/IllegalArgumentException.class)]] [写了 RegularFileObject[E:\DA_Laptrinhmang\NguyenTo.class]] [共 441 毫秒] 构建成功(总时间:2 秒)

【问题讨论】:

  • 你遇到了什么错误?为什么它不起作用?您是否尝试过在与您的应用程序相同的上下文中从命令行运行它...?
  • 我尝试通过cmd在E盘中运行代码java,但我不能因为我的类有导入文件。我需要另一个程序用runtime.exect()执行代码java。
  • 我看到似乎是类路径的一部分(转义不当),但没有主类或 jar 文件。
  • 你能用ProcessBuilder吗?这使得转义命令行变得不那么乏味(例如"E:\\DA_Laptrinhmang NguyenTo"
  • 好吧,这种说法毫无意义。如果您不能从命令行执行该类,是什么让您认为您可以从您的程序中执行它?

标签: java process runtime.exec


【解决方案1】:

这对我有用

package mypackage;

import java.io.IOException;

public class RunSomeJava {

    public static void main(String[] args) throws IOException {
        Process pro = Runtime.getRuntime().exec("java -cp E:\\workspaceIndigo2\\StackOverflow\\bin mypackage.SomeOtherProgram");
    }

}

package mypackage;

import java.io.File;
import java.io.IOException;

public class SomeOtherProgram {

    public static void main(String[] args) throws IOException {
        File f = new File(System.currentTimeMillis()+".txt");
        f.createNewFile();
    }

}

【讨论】:

  • 你已经修改了问题,这是另一个问题
  • 这不太好,@Student 先生
  • 不,很抱歉,但我尝试描述我的问题
猜你喜欢
  • 2015-08-20
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多