我在java中开始使用runTime.exec
的新进程。我从网上复制了一些代码,如果我只是更改我正在访问的类的名称,它使用的类路径对我来说似乎不起作用。代码行:
Process process = runTime.exec(
"java -classpath C:\\projects\\workspace\\testing\\bin Program");
我尝试访问的课程是Program.java
。还有一种方法可以让这个工作适用于任何计算机,只要它们有一个名为Program
的类吗?
那么我应该在那个可以在任何计算机中引用类Program
的区域写一下?
答案 0 :(得分:0)
在运行java类之前,首先应该编译它。
javac Program.java
它将生成一个Program.class
文件。
然后在你的代码中:
// create a file with the working directory we wish
File dir = new File("C:\\projects\\workspace\\testing\\bin");
// create a process and execute java and currect environment
Process process = Runtime.getRuntime().exec("java Program", null, dir);
答案 1 :(得分:0)
我尝试访问的类是Program.java。是否还有一种方法可以使这个工作适用于任何计算机,只要它们有一个名为Program?
的类
您(或他们)需要编译程序。 (这与C,C ++和许多其他编程语言没什么不同。)
他们需要在自己的计算机上安装Java。
他们需要正确调用命令,具体取决于安装Java的位置,(编译的)程序所在的位置,依此类推 1 。
您可以采取各种措施来简化最终用户的操作。例如,您可以实现在标准位置安装软件的安装程序,并提供启动程序或运行它的包装程序脚本。
以编程方式启动Java应用程序(根据您的示例)还有一些额外的问题:
您需要知道java
命令的安装位置(除非您可以依赖搜索路径保持理智)。
您需要知道应用程序的字节码文件和依赖库的安装位置。
通常通过创建包装器脚本或将信息放入特定于应用程序的配置文件来处理这些事情。
为什么我们需要在创建新流程时添加“java program”....
因为这是主流Java工作的方式。 Java编译器(javac
)生成“字节码”文件,而不是传统的(特定于平台的)可执行文件。您需要java
命令来运行字节码文件,因为操作系统不知道自己如何处理它们。
1 - 需要更正的事情是:1)java
命令的路径名,2)类路径必须包括类目录和应用程序所需的JAR文件。使用正确的路径,3)必须正确指定类名。如果您以编程方式从Java调用命令,那么您不能假设exec
知道如何正确地将命令字符串拆分为参数。