我可以从java代码本身以编程方式设置java.library.path吗?以编程方式设置Java.library.path
以下不起作用。
System.setProperty("java.library.path", "/blah");
我可以从java代码本身以编程方式设置java.library.path吗?以编程方式设置Java.library.path
以下不起作用。
System.setProperty("java.library.path", "/blah");
不,你不能。该属性是只读值。您可以在JVM launchin时间更改:
-Djava.library.path=your_path
如果你想从一个特定的位置加载一个库,你可以使用System.load(libraryPath)用,而不是完整的路径到库中。
我想接受这两个答案,但是因为我只能接受一个答案,所以我会继续这样做,因为很酷的入侵依赖于实现细节。 – Fakrudeen
也许这帮助http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/
[编辑]链接是死了,所以我在这里引用它
从 http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/
当使用JNI乱搞复制,一个必须设置“java.library.path” 。不幸的是,唯一的办法就是增加一个系统属性 之前启动应用程序:
的java -Djava.library.path = /路径/要/库
一样
的Java -Djava .library.path = C:\ Java \ ljwgl \ libs org.mypackage.MyProgram 稍后更改系统属性不会产生任何影响,因为 属性非常早和高速缓存。但是jdic 的家伙发现了一种如何解决这个问题的方法。这是有点肮脏 - 但 嘿,这些黑客是我们都爱Java的原因...
System.setProperty(“java.library.path”,“/ path/to/libs”);
Field fieldSysPath = ClassLoader.class.getDeclaredField(“sys_paths” ); fieldSysPath.setAccessible(true); fieldSysPath.set(null,null); 说明
首先系统属性更新为新值。这可能是 是一个相对路径 - 或者您想要动态创建该路径 。
类加载器有一个静态字段(sys_paths),其中包含 路径。如果该字段设置为空,则会自动初始化。 因此迫使该字段为空将尽快调用LoadLibrary导致进库路径的再评价 ()被调用......
+1 - 非常酷的破解 - 我会尝试这是最后的手段[这是非常酷的,但可维护性!]。 – Fakrudeen
请在你的回答中引用文章的相关部分,因为链接可能会死亡(你的)。 –
import java.util.Map;
public class ReadingEnvironment {
public static void main(String[] args) {
System.out.println("Reading System Environment Variables:\n");
// System.out.println(System.getenv());
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n", envName, env.get(envName));
}
}
}
这是否回答这个问题呢?它打印出一个变量列表,它没有设置任何变量。 – berry120
是它会读取环境变量。 以下是使用ini4j设置环境变量的代码。
import java.io.IOException;
import org.ini4j.Reg;
public class SettingWinEnvironmentUsing_ini4j {
public static void main(String args[])
{
System.out.println("Setting System Environment Variables");
Reg reg = new Reg();
Reg.Key env = reg.add("HKEY_CURRENT_USER\\Environment");
env.put("RR_PROPERTY_PATH", "c:\\path");
try {
reg.write();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(env.get("RR_PROPERTY_PATH"));
}
}
你可以找到
如果它不工作的ini4j罐子,你为什么要问? –
我的意思是我给的代码片段不起作用。 – Fakrudeen