以编程方式设置Java.library.path
我可以从java代码本身以编程方式设置java.library.path吗?
以下不起作用。
System.setProperty("java.library.path", "/blah");
不,你不能。 此属性是只读值。 您可以使用以下命令在JVM启动时更改它:
-Djava.library.path=your_path
如果要从特定位置加载库,可以使用System.load(libraryPath)代替库的完整路径。
也许这有帮助http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/
[编辑]链接已经死了,所以我在这里引用它
当搞乱JNI时,必须相应地设置java.library.path
。 不幸的是,唯一的方法是在应用程序启动之前添加系统属性:
java -Djava.library.path=/path/to/libs
与…一样
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)。 如果该字段设置为null,则会自动初始化该字段。 因此,只要调用loadLibrary(),强制该字段为null将导致重新评估库路径…
是的,它将读取环境变量。 以下是使用ini4j设置Environment变量的代码。
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 jar
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 env = System.getenv(); for (String envName : env.keySet()) { System.out.format("%s=%s%n", envName, env.get(envName)); } } }
- 什么时候写入操作的Netty ChannelFuture“完成?”
- java如何实现内部类闭包?
- 是否可以将注入的EntityManagers传递给EJB bean的帮助程序类并使用它?
- 在java中存储当前日期和日期1年
- Java音乐播放器:歌曲信息和播放
- Jersey Rest Service的ResourceConfig和ServletContextListener之间的区别
- eclipse中的glassfish似乎没有看到我的JDK
- java.sql.SQLException:Ioexception:在与oracle的JDBC连接期间从读取调用中减去了一个
- 你如何使用JavaFX监听在TextField中完成的鼠标粘贴?