嗨我有程序执行另一个jar文件
public class MainTestClass {
public static void main( String[] args ) throws IOException, InterruptedException
{
Process proc = Runtime.getRuntime().exec( "java -jar C:\\Users\\rijo\\Desktop\\test.jar" );
proc.waitFor();
java.io.InputStream is = proc.getInputStream();
byte b[] = new byte[is.available()];
is.read( b, 0, b.length );
System.out.println( new String( b ) );
}
}
和test.jar定义是这样的:
public class TestMain {
public static void main( String[] args )
{
System.out.println( "STARTED" );
System.out.println( "PATH : " + new File( "" ).getAbsolutePath() );
System.out.println( "END " );
System.out.println( System.getProperty( "user.dir" ) + " path" );
}
}
我的目的是获取test.jar的运行路径,但是当test.jar由另一个MainTestClass jar执行时,System.getProperty( "user.dir" )
和new File( "" ).getAbsolutePath()
都返回MainTestClass运行路径。有没有办法让test进程中的子进程运行路径。
答案 0 :(得分:3)
你是混淆工作目录(CWD)和运行应用程序的基础(你称之为“运行路径”?)。您可以在任何CWD中运行应用程序,为了使用Java,您可以使用ProcessBuilder
:
String jar = "C:\\Users\\rijo\\Desktop\\test.jar";
Process proc = new ProcessBuilder()
.command("java", "-jar", jar)
.directory(new File(jar).getParentFile())
.start();
实际上,你应该避免依赖CWD,因为用户可以从任何目录运行你的jar。