如何检测程序是否在JAR中运行?
我问这个,因为加载资源如图片,模板等。在JAR文件中它会有所不同。
提前谢谢。
答案 0 :(得分:4)
我问这个,因为 加载图片等资源 模板等。在JAR文件中 会有所不同。
不,如果你做得对,它就不会。
无论是从目录,网络服务器还是JAR文件加载类,这都将完全相同:
ImageIcon icon = new ImageIcon(getClass().getResource("logo.gif"));
或者,使用getResourceAsStream()
方法获得最大的灵活性。
答案 1 :(得分:4)
检查getClass().getProtectionDomain().getCodeSource().getLocation();
- 这会给你一个目录或一个罐子。
答案 2 :(得分:1)
使用getResourceAsStream尝试检索资源。如果您没有在jar中运行,或者找不到该资源,则该方法返回null。在这种情况下,您不是在jar中运行,必须使用FileInputStream或其他方法来检索您的资源。
严格地说,这会检索类路径上的资源,但效果几乎就是您所需要的。
答案 3 :(得分:1)
应用程序以某个类中的main
方法开头,我们称之为com.example.Main
。
您可以使用此代码打印用于加载它的类文件的URL:
System.out.println(ClassLoader.getSystemResource("com/example/Main.class"));
这是用于加载应用程序主类的URL,如果URL String以jar:file:
开头,那么类文件已从jar加载。
答案 4 :(得分:0)
您可以通过检查java.class.path
系统属性来确定它。然而,这不太可能是一个好主意。相反,您应该使用Class.getResourceAsStream()
。然后将资源放在项目中的逻辑目录结构与打包到jar中的资源相同。