0

2 つの SWT アプリケーションがあります。アプリ 1 から、app2 を呼び出します。

Runtime.getRuntime().exec("App2.bat");

App2 が実行されますが、表示を取得するときに例外がスローされます。

java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
    no swt-win32-3740 in java.library.path
    no swt-win32 in java.library.path
    C:\Documents and Settings\Tran Dinh Thoai\.swt\lib\win32\x86\swt-win32-3740.dll: The referenced assembly is not installed on your system
    Can't load library: C:\Documents and Settings\Tran Dinh Thoai\.swt\lib\win32\x86\swt-win32.dll

    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
    at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
    at com.escapenotes.updater.Checker.run(Checker.java:58)
    at com.escapenotes.updater.Runner.main(Runner.java:20)

コマンド ラインから app2 を呼び出す (App2.bat を実行する) と、正常に動作しますが、app1 から実行すると例外がスローされます。app1 から app2 を実行するにはどうすればよいですか?

これは App2.bat の内容です:

  @echo off
  set JH=C:\Program Files\Java\jre6
  set CP=C:\Data\Projects\EscapeNotes\extensions\Updater\bin
  set XNP="%CP%";"%CP%\commons-logging-1.1.1.jar";"%CP%\aws-java-sdk-1.0.007.jar";"%CP%\commons-codec-1.4.jar";"%CP%\commons-httpclient-3.0.1.jar";"%CP%\jsoup-1.6.2.jar";"%CP%\log4j-1.2.8.jar";"%CP%\text.jar";"%CP%\jface.jar";"%CP%\jfacetext.jar";"%CP%\osgi.jar";"%CP%\runtime.jar";"%CP%\swt.jar"
  "%JH%\bin\java.exe" -cp %XNP% com.escapenotes.updater.Runner %1

-Djava.library.path を追加したとき

@echo off
set JH=C:\Program Files\Java\jre6
set CP=C:\Data\Projects\EscapeNotes\extensions\Updater\bin
set XNP="%CP%";"%CP%\commons-logging-1.1.1.jar";"%CP%\aws-java-sdk-1.0.007.jar";"%CP%\commons-codec-1.4.jar";"%CP%\commons-httpclient-3.0.1.jar";"%CP%\jsoup-1.6.2.jar";"%CP%\log4j-1.2.8.jar";"%CP%\text.jar";"%CP%\jface.jar";"%CP%\jfacetext.jar";"%CP%\osgi.jar";"%CP%\runtime.jar";"%CP%\swt.jar"
"%JH%\bin\java.exe" -Djava.library.path="C:\Data\Projects\EscapeNotes\extensions\Updater\bin" -cp %XNP% com.escapenotes.updater.Runner %1

C:\Data\Projects\EscapeNotes\extensions\Updater\bin\swt-win32-3740.dll がありますが、例外が発生しました:

java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
    C:\Data\Projects\EscapeNotes\extensions\Updater\bin\swt-win32-3740.dll: The referenced assembly is not installed on your system
    no swt-win32 in java.library.path
    C:\Documents and Settings\Tran Dinh Thoai\.swt\lib\win32\x86\swt-win32-3740.dll: The referenced assembly is not installed on your system
    Can't load library: C:\Documents and Settings\Tran Dinh Thoai\.swt\lib\win32\x86\swt-win32.dll

    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
    at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
    at com.escapenotes.updater.Checker.run(Checker.java:58)
    at com.escapenotes.updater.Runner.main(Runner.java:20)
4

2 に答える 2

0

例外から、swt-win32 ライブラリが java.library.path 環境変数によって定義されていないようです。「App2.bat」で、次のように -D オプションで指定してください。

java -Djava.library.path=[path to your library]
于 2012-09-05T10:42:33.800 に答える