Java应用程序是否可以使用其名称(而不是其位置)以独立于平台的方式加载到单独的进程中?
我知道你可以通过...执行一个程序
Process process = Runtime.getRuntime().exec( COMMAND );
Run Code Online (Sandbox Code Playgroud)
...这种方法的主要问题是这种调用是特定于平台的.
理想情况下,我将方法包装成简单的方法......
EXECUTE.application( CLASS_TO_BE_EXECUTED );
Run Code Online (Sandbox Code Playgroud)
...并传入应用程序类的完全限定名称CLASS_TO_BE_EXECUTED.
我正在编写一个规则引擎,它执行由条件结构确定的简单赋值.规则是XML格式的项目的先决条件.我已经将我的XML模式建模为类似于简单的代码块.我希望解析XML,然后将其转换为Java代码.然后,我希望在运行时编译(并运行)此代码.这样做意味着我的规则引擎不再充当解释器,而是执行本机Java字节代码.
我已经找到了解析阶段和或多或少的Java代码生成阶段.我现在想弄清楚最后阶段 - 运行阶段的编译.
遵循这个线程:编译为java字节码(不使用Java)我已经意识到以下可能的解决方案:
我希望能比较这些以及在运行阶段解决Java编译的其他建议.
MyClass.java:
package test;
public class MyClass {
public void myMethod(){
System.out.println("My Method Called");
}
}
Run Code Online (Sandbox Code Playgroud)
列出编译MyClass.java文件的SimpleCompileTest.java.
SimpleCompileTest.java:
package test;
import javax.tools.*;
public class SimpleCompileTest {
public static void main(String[] args) {
String fileToCompile = "test" + java.io.File.separator +"MyClass.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在执行SimpleCompileTest类并获得NullPointerException.ToolProvider.getSystemJavaCompiler()返回null.有人能告诉我代码有什么问题
Runtime objRuntime = Runtime.getRuntime();
String strBackupString = "mysqldump -u " + userName + " -p" + password + " " + dbName;
Process objProcess = objRuntime.exec(strBackupString);
Run Code Online (Sandbox Code Playgroud)
这用于备份数据库.但究竟发生了什么?任何人都可以让我解释一下,什么是目的Runtime和Process班?
这个类用于表现我们是否从命令提示符输入命令?然后,我应该通过什么objRuntime.exec(),如果我想打开记事本?我们调用exec方法时是否执行命令?如果是,那么Process这里的用途是什么?我真的无法理解这两个类.请让我明白.提前致谢 :)
从 Java 启动进程时,如果我不从管道读取数据,stderr 和 stdout 都会阻塞输出。目前,我有一个线程主动从一个线程读取数据,而主线程则在另一个线程上阻塞。
有没有一种简单的方法来连接两个流或以其他方式导致子进程继续,同时不丢失 stderr 中的数据?
我有一些通过Runtime.getRuntime.exec(String)运行命令的代码,它可以在 Windows 上运行。当我将代码移至 Linux 时,它崩溃了,修复它的唯一方法是切换到exec(String[])版本。如果我这样保留,代码在 Windows 和 Linux 上的工作方式是否相同,或者我应该在 Windows 上使用 exec(String) 而在 Linux 上使用 exec(String[]) ?
用一段Java代码调用程序的最简单方法是什么?(我想运行的程序是aiSee,它可以从命令行或Windows GUI运行;我在Vista上,但代码也将在Linux系统上运行).