0

次の問題があります。TomcatにJNLPと実行可能JARファイルをデプロイしました。JNLPファイルはJARファイルを自動的にダウンロードして実行する必要があります。JARファイルは署名および検証されます。これが行われます(ダウンロード部分)。ただし、JARメインクラス(JNLPファイルで指定)を実行すると、問題が発生します。メインクラスコードの一部が実行されます。その後、静的なfinal org.apache.log4j.Loggerインスタンスが宣言されているクラスを読み込もうとすると、エラーが発生します。

以下は、JNLPファイルの代表的な部分、コード、およびエラーです。

JNLP

<?xml version='1.0' encoding='UTF-8'?>
<jnlp spec="1.5+" codebase="http://localhost:8080/examples" href="DemoInstaller.jnlp" download="eager" main="true">
    <information>
        <title>Demo Installer</title>
        <vendor>Codemart [www.codemart.ro]</vendor>
        <homepage>https://sourceforge.net/projects/cminstall/</homepage>
        <description>This is a demo installer built using Codemart Installer framework with JavaFX</description>
        <description kind="tooltip">Codemart Demo Installer</description>
        <offline-allowed />
        <shortcut online="true">
            <desktop />
        </shortcut>
    </information>

<security>
    <all-permissions />
</security>

<update check="background" />

<resources>
    <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+" />
            <jar href="DemoInstaller.jar" main="true" download="eager" />
</resources>

<application-desc main-class="ro.codemart.installer.packer.ant.impl.nestedjar.Main" />

メインクラス:

public class Main {
 public static void main(String[] args) throws Exception {
     final Main main = new Main();
     //this is the problem class !
     Class clazz = Class.forName("WizardRunner");
     Method m = clazz.getMethod("main", new Class[]{args.getClass()});
     m.invoke(null, new Object[]{args});      
    ...
   }
}

そして問題のクラス:

public class WizardRunner{

    private final static Logger log = Logger.getLogger(WizardRunner.class);
...
}

そしてエラー:

log4j:ERROR[log4j.dtd]が見つかりませんでした。検索で[sun.misc.Launcher$AppClassLoader@d9f9c3]クラスローダーを使用しました。log4j:ERROR URLを解析できませんでした[jar:http:// localhost:8080 / examples / DemoJar.jar!/log4j.xml]。java.io.FileNotFoundException:com.sun.org.apacheのcom.sun.jnlp.JNLPCachedJarURLConnection.getInputStream(Unknown Source)のcom.sun.jnlp.JNLPCachedJarURLConnection.connect(Unknown Source)にJARエントリlog4j.dtdが見つかりません.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl .XMLEntityManager.startDTDEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ DTDDriver.dispatch (不明なソース)com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ DTDDriver.next(不明なソース)com.sun.org.apache.xerces.internal.impl。DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at com.sun.javaws.Launcher.executeApplication(Unknown Source)at com.sun.javaws.Launcher.executeMainClass(Unknown Source)at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)at com.sun.javaws.Launcher.run(Unknown Source)at java.lang.Thread.run(Unknown Source)log4j:WARNロガーのアペンダーが見つかりませんでした( WizardRunner)。log4j:WARNlog4jシステムを正しく初期化してください。lang.Thread.run(Unknown Source)log4j:WARNロガー(WizardRunner)のアペンダーが見つかりませんでした。log4j:WARNlog4jシステムを正しく初期化してください。lang.Thread.run(Unknown Source)log4j:WARNロガー(WizardRunner)のアペンダーが見つかりませんでした。log4j:WARNlog4jシステムを正しく初期化してください。

ありがとうございました!

4

3 に答える 3

1

問題にはlog4j.jarがないのではないかと思います。これは、.jnlpファイルで指定またはロードされていません。前の回答でクラスパスにあるとおっしゃいましたが、WebStartを介して実行している場合はどうでしょうか。クラスパスは、.jnlpファイルで定義されているものに限定されていると思います。

追加してみてください

<jar href="log4j.jar" main="true" download="eager" />

<resources>
于 2009-05-12T19:27:04.993 に答える
0

スタックトレースを見ると、エラーの原因はlog4j.dtdのFileNotFoundExceptionです。log4j.xmlからDTDがどのように参照されているかを確認してください。DTDはjarファイルに含まれていますか?JVMがロードできる場所にある必要があります。

于 2009-05-12T10:48:54.557 に答える
0

はい、log4j.dtdファイルにはlog4j-1.2.12.jarが埋め込まれています。また、このlog4jjarはクラスパスにあります。

于 2009-05-12T13:21:33.320 に答える