Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有绝对路径的情况下从Java运行jar文件_Java_Directory_Executable Jar - Fatal编程技术网

在没有绝对路径的情况下从Java运行jar文件

在没有绝对路径的情况下从Java运行jar文件,java,directory,executable-jar,Java,Directory,Executable Jar,我有一个Calculator.jar文件,是用Netbeans创建的 我想用java代码运行那个jar文件。在查看了stackoverflow和一些文档站点之后,我尝试了以下方法: public static void main (String [] args){ Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("java -jar C:\\pathToJar\\Calculator.jar); pr.wai

我有一个Calculator.jar文件,是用Netbeans创建的

我想用java代码运行那个jar文件。在查看了stackoverflow和一些文档站点之后,我尝试了以下方法:

public static void main (String [] args){
    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("java -jar C:\\pathToJar\\Calculator.jar);
    pr.waitFor();
}
代码运行正常,但我的问题是文件的路径。如果我在没有绝对路径的情况下运行程序,它会运行并完成,但我从未看到计算器GUI弹出。当我使用绝对路径运行时,GUI会按预期弹出

我将jar文件放在与源代码相同的位置。我想这样做会让我只需要把Calculator.jar放在没有绝对路径的地方。但这似乎不起作用

有人知道我如何存储jar文件,这样我就不需要使用绝对路径了吗

编辑: 我还尝试在项目中创建一个名为jarFiles的单独包,并尝试了路径
jarFiles\Calculator.jar
。那也没用。我想我误解了默认路径/调用命令时默认使用的路径cmd。不过我不确定


感谢您提前提出的建议

我相信你遇到的问题是当你尝试

public static void main (String [] args){
    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("java -jar \\Calculator.jar");
    pr.waitFor();
}
它查到了计算机的根目录,而且,最后忘记了一个引号。访问当前工作目录的方法是简单地删除
\\
,您可能还希望用引号括住jar文件路径,以防万一

public static void main (String [] args){
    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("java -jar \"Calculator.jar\"");
    pr.waitFor();
}

“当前工作目录”是您在运行程序之前更改为的任何目录。在某些IDE中,可以将其设置为相对于类文件的特定点。但是当你写程序的时候,你不能依赖这个。要么解析相对于已知点的路径,要么使用绝对路径。但是如果我写了“projectpackage\src\Calculator.jar”之类的东西,那就行不通了。从技术上讲,我在这一点上设置了一个相对路径。或者,我是否需要执行“getWorkingDirectory”之类的操作,然后访问该文件?当您从IDE运行程序时,您可能会发现查看当前工作目录是什么很有教育意义。请记住,当它从命令行运行时,用户可以设置他们喜欢的任何工作目录。您可能希望将路径作为参数、环境变量传递,或者相对于已知文件进行解析。我不确定这是否正是您所要查找的,但您的IDE似乎是从不同的位置运行jar的。谢谢您的帮助,但我已经修复了它。我以为我的工作目录是一个地方,而它是另一个地方。