問題タブ [urlclassloader]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java: 自動カスタム ClassLoader
私のアプリケーションは、GUI に Standard Widget Toolkit (SWT) を使用しています。私の問題は、32 ビット SWT ライブラリが 64 ビット JVM で動作しないことです。しかし、私は、ソフトウェアを入手するときに人々に正しいアーキテクチャを選択させたくありません。そのため、32 ビットと 64 ビットの両方のライブラリをバンドルし、実行時にアーキテクチャを自動検出したいと考えています。次のように、JVMの正しいアーキテクチャを取得できることがわかりました。
あとは、jar をロードするだけです。しかし問題は、私が見つけたすべての例では、クラスを使用する前に手動でクラスをロードする必要があることです。
私の質問は、事前にクラスをロードする必要がないように、クラスローダーを「登録」することは可能ですか?
更新: の独自の子クラスを作成URLClassLoader
し、コマンド ライン引数を使用してデフォルトのクラス ローダーとして設定しました-Djava.system.class.loader
。しかし、私はこのエラーが発生します:
LibraryLoader.<init>
コンストラクターを参照していると思います...しかし、そこにあります( public LibraryLoader(URI[] urls)
)。
更新 2: JVM が実行されるようになりました。このコンストラクターを追加して、機能させました。
しかし、addPath()
( file:lib/jars/swt.jar
) で jar を追加した後は、NoClassDefFoundError
. はい、ファイルが存在することを再確認しました。
java - カスタムURLClassLoader、実行時のNoClassDefFoundError
独自URLClassLoader
に作成し、を介してシステムクラスローダーとして設定しましたjava.system.class.loader
。初期化されてすべてですが、ロードしようとしているクラスが見つかりません。これがURLClassLoader
:
jarが存在し、パスが正しいことを確認しました。これは私が私のプログラムでそれを呼ぶ方法です:
これは私が得る例外です(166行目は私が新しいものを作成しようとしている行を指しますPoint
:
私は次のようにクラスを明示的にロードしようとしました:
これを引き起こしているのは何ですか?それは「うまくいく」べきではありませんか?
更新:これがからの重要なコードですMyProgram
アップデート2: SSCCEは次のとおりです:http://nucleussystems.com/files/myprogram.zip。を呼び出しjava -Djava.system.class.loader=mp.LibraryLoader -jar myprogram.jar
ます。
java - ロードされたクラスからクラスの変数とメソッドを取得します。
私のシナリオ:
クラスは、ClassLoader を使用して多数の異なるクラスからロードされます。
別のクラスをロードするクラスからメソッドと変数を取得するにはどうすればよいですか? つまり、名前がわからないクラスからメソッドと変数を取得します。
例:
スタックオーバーフローを検索しましたが、運がありません:/
どんな助けでも感謝します:)。
マイク。
java - Toolprovider でクラスをコンパイルし、ClassLoader でロードする
実行時にコンパイルを生成するクラスをロードしようとしています。このコードで問題なくコンパイルできます。
しかし、後で使用するためにコンパイルしたクラス (またはコンパイルされた場所) をロードする方法がわかりません。私は次のようないくつかのことを試しました:
また
成功せずに(私はこれらを理解していません...)。私がそれから開発できるように、私を助けてくれるか、これを行うための簡単な例を挙げていただけますか?
前もって感謝します。
java - 署名されたアプレットは、セキュリティの問題があるURLClassLoaderを使用して署名されたjarファイルをロードします
署名されたアプレットがあります。プラグインアーキテクチャを実装するために、特定のクラスのJARファイルをダウンロードしてディスクに保存します。
次に、これらのクラスに。をロードしURLCLassLoader
ます。そのため、ロードされたクラスからメソッドを呼び出そうとしましたが、セキュリティ上の問題があります。
「サイントークン」は、SecurityManager
ロードされたクラスがいつであるかによってチェックできないようURLClassLoaded
です。誰かがこの問題を解決する方法を知っていますか?
どうもありがとう!
読み込んでいます。
呼び出し。
例外。
classloader - ディレクトリからクラスを読み込めません。jar を使用して、jar が解凍/解凍されたときにクラスのロードを行うことができます
コミュニティ!あなたが私の問題で私を助けることができれば素晴らしいでしょう.
カスタム クラス ローダーを取得しました。これは、java.system.class.loader
クラスを検索する URL を保持します。このような:
次に、java(JDK6) を -Djava.system.class.loader=TestSystemClassLoader eg.TestMain で実行します。ここで、eg.TestMain' main:
私を怒らせるのは、junit-4.8.2.jarを解凍/解凍/解凍すると、eg.TestMainが機能することです!
問題は、ディレクトリ全体、つまりディレクトリに存在するすべてのファイルをクラスパスに配置することを java(JDK6) に伝える方法です。
前もって感謝します!
java - ClassLoader を「閉じる」にはどうすればよいですか?
ユーザーが提供するスクリプトの実行中にコードを一時的に表示するために、アプリケーションで多くのクラスローダーを作成する必要がある場合があります。私はURLClassLoader
これに を使用していますが、かなりうまく機能します。
スクリプトが終了したら、クラス ローダーを「アンロード」または「クローズ」してリソースを解放します。
クラスローダーへの参照を に設定するだけで十分null
ですか? 余分なクラスが JAR ファイルにあるため、最終的にファイル ハンドルが不足するのではないかと特に考えています。
PS: Java 5 以降で動作する必要があります。ええ、私は知っています...
java - 実行時にjarファイルのすべてのクラスをロードする方法は?
this questionによると、次のようにして jar ファイルからクラスをロードできます。
jar ファイルに含まれるすべてのクラスをロードする方法は?
java - URLClassLoader はどのように機能しますか? ジャワ
だから私は URLClassLoader の使い方を知っており、それが何をするかを知っています。
基本的に私は尋ねています: それはライブ ストリームですか? それとも、一時的なダウンロードを行い、クラスをローカルで読み取りますか?
したがって、URLClassLoader を使用してロードしているクラスからメソッドを継続的に呼び出すと、ランダムにインターネットを失った場合、Java snip-it は失敗しますか?
それとも、一度だけダウンロードするだけで、インターネットに接続できなくなった場合でも、最初に既にダウンロードされているので問題ありませんか?
どんな情報でも素晴らしいでしょう、ありがとう。
java - URLClassLoaderは、クラス定義が見つからないという例外をスローします
私には3つのJavaプロジェクトA、B、Cがあります。BはAのアドオンのようなものです。AとBはどちらも、一部のクラスでプロジェクトCに依存しています。
プロジェクトAで、URLClassLoaderを次のように使用すると次のようになります。
これらのuclを使用しているときに、Bでいくつかのメソッドを呼び出すと、クラス定義が見つからないという例外が発生します。これはCであるクラス用です。
ClassLoaderを次のように使用すると、次のようになります。
これは、Bのメソッドを呼び出すときに正常に機能します。私の質問:
1)最初の方法で行う場合、どのClassLoaderが使用されていますか?JavaDocsを読みましたが、説明できるものが見つかりませんでした。
2)依存関係の問題が発生しないように、プロジェクトBに固有のClassLoaderを取得する方法はありますか?これを何らかの方法で使用できますか?
助けてくれてありがとう。