[英]How to run SWT application from SWT application?
我有两个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)
从异常看来,swt-win32库似乎不是由java.library.path环境变量定义的。 在您的“ App2.bat”中,请通过-D选项提供它,例如:
java -Djava.library.path=[path to your library]
看看SWT源代码片段项目中的SnippetLauncher。 它演示了如何以编程方式启动代码片段。
https://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/SnippetLauncher.java
以上适用于跨平台。 我已经在Linux和Windows上使用过它。
要尝试的另一件事是复制终止代码段的运行配置。 在调试视图中,查看终止运行的属性,它显示了用于运行代码段的命令。 (我在Gtk上执行此操作,不确定在Windows上是否可以正常运行)。
让我知道这是否为您解决了问题,或者您还有其他问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.