如何判断我的应用程序运行的JVM是32位还是64位?具体来说,我可以访问什么功能或偏好来在程序中检测到这个?
SWT附带一个基础JAR和每个平台一个特定的JAR(Windows,Linux/32位,Linux/64位,Mac,AIX,...).如何创建可在运行时选择正确平台JAR的可执行JAR?
[编辑]我想在一个子目录中提供所有平台JAR,main()
然后修改类加载器.有没有人试过这个?
我在swing应用程序中使用JWebBrowser.本课程属于DJ Project.它需要swt jar来执行.现在我已将swt jar for windows包含在应用程序的jar包装中.我想知道如何在同一包装中包含用于linux/mac的swt jar?我正在使用ant来构建应用程序jar.我应该为不同的平台构建不同的swt jar吗?
我一直在做很多研究,并试图找到一个指南,可以教我如何正确地将YouTube视频直接嵌入到我的视频中JFrame
.我已经阅读了YouTube API上的所有Google Developers指南,但找不到我想要做的事情.
我正在尝试将YouTube视频直接嵌入到JFrame
我的主要方法中使用init.例如:
/**
* Main
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
try {
UIManager.setLookAndFeel(new NimbusLookAndFeel());
} catch (UnsupportedLookAndFeelException ulafe) {
Loader loader = new Loader();
loader.doFrame();
}
Start Loader = new Start();
Loader.setVisible(true);
}
/**
* Start
* @throws IOException
*/
public Start() throws IOException {
super("Ryan's Client Launcher version: '0.0.1'");
try {
getContentPane().setBackground(Color.BLACK);
setBackground(Color.BLACK);
BufferedImage image39 = ImageIO.read(getClass().getResourceAsStream("\\jaggl\\igs\\39.png"));
this.setIconImage(image39);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(new Dimension(launcherWidth, …
Run Code Online (Sandbox Code Playgroud) 这是潜在问题的背景,我正在与一个使用Swt
库的项目小组合作,我正在尝试打包软件进行部署.事实证明,SWT
它非常依赖于平台/架构.我希望能够将所有六个jar
(linux,mac,win和32/64位)打包到同一个包中,并根据系统使用相应的库.我意识到这是一个艰难的挑战,但转换到Swing
(或其他任何东西)现在并不是一个真正的选择.
我找到了许多相关主题(@Aaron Digulla的主题和@ mchr的主题),它为我提供了有关手头问题的宝贵见解.我试图落实@Alexey罗曼诺夫提出的解决方案在这里.有一点不同,因为loadSwtJar()
他提出的方法不是静态的,我实例化对象,然后紧接着,在对对象做任何其他事情之前运行方法.
看起来装载过程无法正常工作.我对此声明的推理如下:
Swt
从可执行jar文件的类路径中删除所有jar,则Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/events/MouseListener
抛出由以下原因引起的:java.lang.ClassNotFoundException: org.eclipse.swt.events.MouseListener
对我来说,这意味着在类路径中找不到库,我错了吗?
swt
jar类保留在类路径上,则系统在执行期间使用第一个jar文件.这意味着如果gtk-linux-x86_64恰好是jar列表中的第一个swt jar,那么无论系统是win32还是Mac OSX,系统都会尝试使用它.我试图添加一些输出来查看该loadSwtJar()
方法是否选择了正确的jar,并且输出似乎在我尝试的所有平台上都正确,因为选择了正确的包(并且文件确实存在于runnable jar中).但是仍然没有加载正确的库因此导致执行错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException
由ex引起:( Caused by: java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
请注意,如果我更改build.xml
文件上64位和32位swt库的出现顺序,这是我在Linux机器上出现的错误)
那么,这里的问题似乎是什么?我是否错过了一些细节,或者根本无法检查系统属性并相应地加载适当的库?
下面是我的构建文件的摘录,认为它可能有助于找到问题的根源.
提前致谢,
编辑:经过与同事的长时间调试,问题得到解决(除了我在这里提到的关于MacOS上的线程管理的烦人的错误).它涉及到使用ANT构建进行调整以及编写主类的方式.(事实证明,主类是从SWT库扩展和实现引用,这意味着代码根本不会编译,用另一个类包装主类并从那里加载SWT jar似乎已经足够了解决这个问题)
感谢所有贡献的人,特别是@Aaron.非常感谢!
这个话题已经有几个问题了,但似乎没有一个能正常工作。
以下是它们的列表:
我的要求是构建一个 ant 脚本,为每个平台创建一个 jar,即一个用于 Windows x86,一个用于 Windows x64、Linux x86/x64 等等。
有没有人有任何进一步的见解?
使用上述方法,我无法产生可行的解决方案。它要么以未自动加载 SWT jar 文件或未包含在类路径中而结束。
如果有人能提出一个工作示例(最好包括完整的源代码),那就太好了!
在SWT项目目前维持对每个支持的操作系统一个分配.例如:
swt-3.4.2-win32-win32-x86.zip
swt-3.4.2-gtk-linux-x86.zip
swt-3.4.2-carbon-macosx.zip
是否有正确的Thing™可分发,无论应用程序运行在哪个操作系统上?
java ×6
swt ×5
ant ×2
jar ×2
32-bit ×1
64-bit ×1
build ×1
executable ×1
jvm ×1
portability ×1
swing ×1
youtube-api ×1