• ベストアンサー

プログラム内でのPath設定

javaのプログラム内でパスを設定することはできますか? public class Test { public static void main(String[] args) { System.setProperty("java.library.path", System.getProperty("java.library.path") + ";C:/library/path"); System.loadLibrary("library"); } } 上のようにすると以下のエラーが出ます。 java.lang.UnsatisfiedLinkError: no library in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517) at java.lang.Runtime.loadLibrary0(Runtime.java:788) at java.lang.System.loadLibrary(System.java:834) at Test.main(Test.java:6) Exception in thread "main" 環境変数「PATH」に C:/library/path を設定すると System.loadlibrary("library") で libraryを読み込むことができます。 なぜ上のやり方では読み込めないか教えてください。

  • weird
  • お礼率37% (3/8)
  • Java
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • foetida
  • ベストアンサー率22% (48/217)
回答No.1

とりあえずSystem.out.plintlnでプロパティを手作業で設定した場合と、プログラムで設定した場合との値が同じがどうかを確認してはいかがでしょうか。

weird
質問者

補足

System.out.plintlnでプロパティを手作業で設定した場合と、プログラムで設定した場合との値が同じかどうかを確認したところ、同じでした。 System.loadLibrary()関数内で参照するpathは、プログラム内で変更できない、つまり、システム環境変数を使用するという理解でよろしいですか?

その他の回答 (1)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

>なぜ上のやり方では読み込めないか >System.loadLibrary()関数内で参照するpathは、プログラム内で変更できない、つまり、システム環境変数を使用するという理解でよろしいですか? いや、実装依存では?

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/lang/System.html#load(java.lang.String)

関連するQ&A

  • JNIでロードするライブラリが見つからない

    JNIを使ってライブラリを呼び出すとき, Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path というようにライブラリが見つからないエラーが出て困っています. 【Javaのコード】 [*****@**** jnitest]$ vi HelloWorldJNI.java public class HelloWorldJNI { static { System.loadLibrary("HelloWorldJNIlib"); } public native void sayHelloWorld(); public static void main(String[] args) { HelloWorldJNI hello = new HelloWorldJNI(); hello.sayHelloWorld(); } } 【Cのコード】 [*****@**** jnitest]$ vi HelloWorldJNI.c #include "HelloWorldJNI.h" JNIEXPORT void JNICALL Java_HelloWorldJNI_sayHelloWorld (JNIEnv *env, jobject obj ) { printf("Hello World"); } 【手順】 [*****@**** jnitest]$ javac HelloWorldJNI.java [*****@**** jnitest]$ ls HelloWorldJNI.c HelloWorldJNI.class HelloWorldJNI.java [*****@**** jnitest]$ javah HelloWorldJNI [*****@**** jnitest]$ ls HelloWorldJNI.c HelloWorldJNI.class HelloWorldJNI.h HelloWorldJNI.java [*****@**** jnitest]$ gcc -fPIC -shared -I/usr/lib/jvm/java-1.6.0/include/ -I/usr/ lib/jvm/java-1.6.0/include/linux/ HelloWorldJNI.c -o HelloWorldJNIlib.so [*****@**** jnitest]$ ls HelloWorldJNI.c HelloWorldJNI.h HelloWorldJNIlib.so HelloWorldJNI.class HelloWorldJNI.java [*****@**** jnitest]$ export LD_LIBRARY_PATH=. [*****@**** jnitest]$ java HelloWorldJNI Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1698) at java.lang.Runtime.loadLibrary0(Runtime.java:840) at java.lang.System.loadLibrary(System.java:1047) at HelloWorldJNI.<clinit>(HelloWorldJNI.java:3) [*****@**** jnitest]$ java -Djava.library.path=. HelloWorldJNI Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloWorldJNIlib in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1698) at java.lang.Runtime.loadLibrary0(Runtime.java:840) at java.lang.System.loadLibrary(System.java:1047) at HelloWorldJNI.<clinit>(HelloWorldJNI.java:3) [*****@**** jnitest]$ 何を見直すべきかおわかりの方いらっしゃいませんでしょうか.

    • ベストアンサー
    • Java
  • eclipseでのjogl利用について

    ネットで調べた通りにビルドパスを構成したつもりなんですけど Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682) at java.lang.Runtime.loadLibrary0(Runtime.java:822) at java.lang.System.loadLibrary(System.java:993) at com.sun.opengl.impl.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:189) at com.sun.opengl.impl.NativeLibLoader.access$000(NativeLibLoader.java:49) at com.sun.opengl.impl.NativeLibLoader$DefaultAction.loadLibrary(NativeLibLoader.java:80) at com.sun.opengl.impl.NativeLibLoader.loadLibrary(NativeLibLoader.java:103) at com.sun.opengl.impl.NativeLibLoader.access$200(NativeLibLoader.java:49) at com.sun.opengl.impl.NativeLibLoader$1.run(NativeLibLoader.java:111) at java.security.AccessController.doPrivileged(Native Method) at com.sun.opengl.impl.NativeLibLoader.loadCore(NativeLibLoader.java:109) at com.sun.opengl.impl.windows.WindowsGLDrawableFactory.<clinit>(WindowsGLDrawableFactory.java:60) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:164) at javax.media.opengl.GLDrawableFactory.getFactory(GLDrawableFactory.java:106) at javax.media.opengl.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:520) at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:131) at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90) at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:83) at demos.gears.Gears.main(Gears.java:19) このような、エラーが出ました。 どうしたら、いいかわかりません。教えていただけないでしょうか!!

  • Javaでのlpsolveの利用方法を教えてください。

    Javaでのlpsolveの利用方法を教えてください。 JavaプログラムのIPtest.javaが実行できません。 どのようにしたら、JavaのAPIであるlpsolveを利用できるのか教えて頂けませんか? IPtest.javaのソース。 import lpsolve.*; public class IPtest { public static void main(String[] args) { try { /* 変数5 個,制約0 個の問題を作成 */ LpSolve solver = LpSolve.makeLp(0, 5); /* 1つ目の制約を追加 */ solver.strAddConstraint("8 2 6 4 5", LpSolve.LE, 20); /* 変数1 から5 を0-1 変数に設定 */ solver.setBinary(1, true); solver.setBinary(2, true); solver.setBinary(3, true); solver.setBinary(4, true); solver.setBinary(5, true); /* 目的関数の係数を設定 */ solver.strSetObjFn("5 3 7 8 6"); /* 目的を最大化に設定 */ solver.setMaxim(); /* 求解 */ solver.solve(); /* 解の表示 */ System.out.println("OptVal = " + solver.getObjective()); double[] var = solver.getPtrVariables(); for (int i = 0; i < var.length; i++) { System.out.println("var[" + i + "] = " + var[i]); } /* 後始末(問題の消去とメモリの解放) */ solver.deleteLp(); } catch (LpSolveException e) { e.printStackTrace(); } } } OS : Windows Vista 一応、環境変数のCLASSPATHをC:\lp_example\lpsolve55j.jarに設定したら、 コンパイルは出来て、実行が出来ない状態です。 実行すると、  Exception in thread "main" java.lang.UnsatisfiedLinkError: no lpsolve55j in java .library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1030) at lpsolve.LpSolve.<clinit>(LpSolve.java:275) at IPtest.main(IPtest.java:8) このように出てしまいます。

  • 外部ライブラリについて

    Java初心者です・・。 eclipse上で、以下のソースで実行したところ、エラーになりました。 外部のライブラリを使用しているからかと思い、ビルド・パスを設定しました。 しかし・・・まだエラーが表示されます・・・。 どなたかご存知の方・・・アドバイスをお願いします。 [ソース] import javax.swing.*; import java.awt.*; class FusenExec { static public void main(String[] args) { String msg =JOptionPane.showInputDialog ("メッセージを入力して下さい。"); Dodai fusen = new Dodai(); JLabel label = new JLabel(msg); label.setOpaque(true); label.setBackground( Color.YELLOW); fusen.add(label); fusen.setSize(300, 50); fusen.setVisible(true); } } [エラー内容] Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at FusenExec.main(FusenExec.java:10)

    • ベストアンサー
    • Java
  • 環境変数を設定すると・・・???

    C:\Users\hop77>cd\JAVA C:\JAVA>javac Main.java C:\JAVA>java Main Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 58.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 英語は得意だったのですけれど、もう忘れました。 どうすればいいでしょうか?

    • ベストアンサー
    • Java
  • データベースに接続できません

    データベースに接続できません java初心者です eclipseで開発を行っているのですが、どうもエラーがでてきて接続できません よろしくおねがいします エラー内容 Exception in thread "main" java.lang.NoClassDefFoundError: DataBase Caused by: java.lang.ClassNotFoundException: DataBase at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:315) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330) at java.lang.ClassLoader.loadClass(ClassLoader.java:250) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)

  • LinuxでJava環境

    LinuxでJavaを使った開発をしたいのですが、環境設定でつまずいてしまい 、困っております。 環境 OS:windowsとUbuntuのデュアルブートです。 状況 javaを、 sudo update-alternatives --config java でインストールしましたが、コンパイルができません。 ファイルはデスクトップに置き、java ****.javaで実行しましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: test/java/java Caused by: java.lang.ClassNotFoundException: test.java.java at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) のエラーが出てしまいます. また、eclipseをインストールして、画面を開こうとしても、すぐに消えてしまいます. Linuxの挙動がまったくわかりません。 もしかすると、rootでアレコレコマンドを試したから,再起不能の状態になっているのではないかと危惧しております。 Linuxの知識はゼロの初心者です。 そうかお助けをお願い致します。

  • Lunux で Java をするには?

    CLASSPATH=.:/root/workspace/test:export CLASSPATH と環境設定し /root/workspace/test/test に Test0.java: package test; class SayHello { public void method() { System.out.println("Hello World!"); } } と SayHello.java: package test; public class Test0 { public static void main(String[] args) { SayHello sh=new SayHello(); sh.method(); } } を作り javac Test0.java SayHello.java をし(成功) java Test0 をしたのですが [root@Prime test]# java Test0 Exception in thread "main" java.lang.NoClassDefFoundError: loaded class Test0 was in fact named test.Test0 at java.lang.VMClassLoader.defineClass(libgcj.so.7) at java.lang.ClassLoader.defineClass(libgcj.so.7) at java.security.SecureClassLoader.defineClass(libgcj.so.7) at java.net.URLClassLoader.findClass(libgcj.so.7) at java.lang.ClassLoader.loadClass(libgcj.so.7) at java.lang.ClassLoader.loadClass(libgcj.so.7) at java.lang.Class.forName(libgcj.so.7) at gnu.java.lang.MainThread.run(libgcj.so.7) [root@Prime test]# となりうまくいかないのですが対策を教えてください。

    • ベストアンサー
    • Java
  • java実行時のメッセージについて

    50歳にてjavaを勉強しようとしているものです。 javaの本より例題を作成してみたのですが、うまくいきません。 javaをインストールしてjavacが正常でいざ実行した際、以下のメッセージが表示されました。何の意味かさっぱりわかりません。このサイトで質問するレベルではないかと思いますが、アドバイスいただければ幸いです。 作成したプログラムは class hello { public static void main(String[] args) { System.out.println("こんにちは"); } } javac ではエラー表示なし → C:\javabook\part1>javac Hello.java C:\javabook\part1> これを実行すると、 C:\javabook\part1>java Hello Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: he llo) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 1) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: Hello. Program will exit. と表示されます。 何がエラーとなっているのでしょうか?

    • ベストアンサー
    • Java
  • SVF

    SVFを使用して帳票を出力したいのですが、下記のエラーが表示されて正常に起動しません。 「プロシージャエントリーポイント OCIPServer Post がダイナミックライブラリー OCI.DLLから見つかりませんでした。」⇒「OK」をクリック後、 「request erroe. [HTTP status code:404])」 また、SVFのログを抜粋して記載します。 [10] jdbc driver class : oracle.jdbc.driver.OracleDriver [10] jdbc driver encode : 0 [10] java.lang.UnsatisfiedLinkError: C:\oracle\product\10.2.0\db_1\BIN\ocijdbc10.dll: ?w?????v???V?[?W????????????????B [10] at java.lang.ClassLoader$NativeLibrary.load(Native Method) [10] at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1586) [10] at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1511) [10] at java.lang.Runtime.loadLibrary0(Runtime.java:788) [10] at java.lang.System.loadLibrary(System.java:834) [10] at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:3134) [10] at java.security.AccessController.doPrivileged(Native Method) [10] at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java:3130) [10] at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:220) [10] at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:413) [10] at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:131) [10] at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:77) [10] at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752) [10] at jp.co.fit.query.SqlDriver.connect(Unknown Source) [10] at jp.co.fit.query.SqlDriver.<init>(Unknown Source) [10] at jp.co.fit.vfreport.PrintDriverWrapper.VrSetQuery(Unknown Source) [10] at jp.co.fit.vfreport.Vrw32.VrSetQuery(Unknown Source) [10] at jp.co.fit.vfreport.SvfrExecuter.dispatch(Unknown Source) [10] at jp.co.fit.vfreport.SvfrServer$Client.run(Unknown Source) [10] at java.lang.Thread.run(Thread.java:534) なにぶん初心者ですから...ちなみに環境は以下の通りです。 ・WindowsXP ・JDK1.4.2_03 ・Oracle - OraDb10g_home1:Oracle ODBC Driver. Release 10.1.0.2.0 ・Oracle - OraClient10g_home1:Oracle ODBC Driver. Release 9.2.0.4.0 わかりにくいかもしれませんが、宜しくお願い致します。