ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 7使用Web Start打破OS X上的SWT应用程序

2019-10-06 20:03:59  阅读:245  来源: 互联网

标签:java macos java-7 swt java-web-start


我们有一个通过使用SWT库的webstart启动的应用程序.

众所周知,osx需要swt库在主线程中运行,所以我们在jnlp中有这个:

<resources os="Mac"> 
    <j2se version="1.6+" java-vm-args="-XstartOnFirstThread"/>
    <jar href="swt-mac64.jar"/>
</resources>

由于我们已经升级到Java 7(1.7.0_10),似乎webstart没有将“-XstartOnFirstThread”传递给它启动的java进程.

我可以从’ps’看到java进程没有得到“-XstartOnFirstThread”选项.

有谁知道如何让webstart回到之前的行为?

问候,
戈德.

这是webstart日志显示的内容:

Java Web Start 10.10.2.18
Using JRE version 1.7.0_10-b18 Java HotSpot(TM) 64-Bit Server VM
User home directory = /Users/shier
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
0-5: set trace level to <n>
----------------------------------------------------
    Match: beginTraversal
Match: digest selected JREDesc: JREDesc[version 1.6+, heap=-1--1, args=-XstartOnFirstThread, href=null, sel=false, null, null], JREInfo: JREInfo for index 0:
    platform is: 1.7
    product is: 1.7.0_10
    location is: http://java.sun.com/products/autodl/j2se
    path is: /Library/Internet Plug-ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
    args is: null
    native platform is: Mac OS X, x86_64 [ x86_64, 64bit ]
    JavaFX runtime is: JavaFX 2.2.4 found at /Library/Internet Plug-ins/JavaAppletPlugin.plugin/Contents/Home/
    enabled is: true
    registered is: true
    system is: true

    Match: ignoring maxHeap: -1
    Match: ignoring InitHeap: -1
    Match: digesting vmargs: -XstartOnFirstThread
    Match: digested vmargs: [JVMParameters: isSecure: false, args: -XstartOnFirstThread]
    Match: JVM args after accumulation: [JVMParameters: isSecure: false, args: -XstartOnFirstThread]
    Match: digest LaunchDesc: http://htxuat.example.com/broker/broker-XX.jnlp
    Match: digest properties: []
    Match: JVM args: [JVMParameters: isSecure: false, args: -XstartOnFirstThread]
    Match: endTraversal ..
    Match: JVM args final: -XstartOnFirstThread
    Match: Running JREInfo Version    match: 1.7.0.10 == 1.7.0.10
     Match: Running JVM args match the secure subset: have:<"-Djnlp.application.href=\"http://htxuat.example.com/broker/broker-XX.jnlp \"">  satisfy want:<-XstartOnFirstThread>
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Available host [tcp:htxuat.example.com:49200]
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Available host [ssl:htxuat.example.com:49301]
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Will try the first address [tcp:htxuat.example.com:49200]
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Using host [tcp:htxuat.example.com:49200]
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Don't forget to change back the logging, this is only temporary
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Using library /Users/shier/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Dec 13, 2012 10:19:49 AM com.example.log.JavaUtilLogger infoImpl
INFO: Registering  [com.example.client.ClientController]
JNLPClassLoader: Finding library libswt-cocoa-3738.dylib
JNLPClassLoader: Finding library libswt-cocoa.dylib
JNLPClassLoader: Finding library libswt-pi-cocoa-3738.dylib
JNLPClassLoader: Finding library libswt-pi-cocoa.dylib
***WARNING: Display must be created on main thread due to Cocoa restrictions.
Dec 13, 2012 10:19:50 AM com.example.log.JavaUtilLogger errorImpl
SEVERE: Problem
org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:4282)
    at org.eclipse.swt.SWT.error(SWT.java:4197)
    at org.eclipse.swt.SWT.error(SWT.java:4168)
    at org.eclipse.swt.widgets.Display.error(Display.java:1065)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:822)
    at org.eclipse.swt.widgets.Display.create(Display.java:805)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:130)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:696)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:687)
    at org.eclipse.swt.widgets.Display.getDefault(Display.java:1383)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:270)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:263)
    at com.example.swt.ShellViewParent.attach(ShellViewParent.java:124)
    at com.example.swt.MultipleParents.init(MultipleParents.java:55)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:320)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:287)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:278)
    at com.example.client.gui.prefs.PreferencesViewController.<init>(PreferencesViewController.java:53)
    at com.example.client.ClientController.init(ClientController.java:353)
    at com.example.mvc.Controller.register(Controller.java:51)
    at com.example.client.Application.loadComponents(Application.java:153)
    at com.example.client.Application.start(Application.java:139)
    at com.example.client.Application.main(Application.java:166)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    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(Thread.java:722)

org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:4282)
    at org.eclipse.swt.SWT.error(SWT.java:4197)
    at org.eclipse.swt.SWT.error(SWT.java:4168)
    at org.eclipse.swt.widgets.Display.error(Display.java:1065)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:822)
    at org.eclipse.swt.widgets.Display.create(Display.java:805)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:130)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:696)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:687)
    at org.eclipse.swt.widgets.Display.getDefault(Display.java:1383)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:270)
    at org.eclipse.swt.widgets.Shell.<init>(Shell.java:263)
    at com.example.swt.ShellViewParent.attach(ShellViewParent.java:124)
    at com.example.swt.MultipleParents.init(MultipleParents.java:55)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:320)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:287)
    at com.example.client.mvc.ViewController.setViewParents(ViewController.java:278)
    at com.example.client.gui.prefs.PreferencesViewController.<init>(PreferencesViewController.java:53)
    at com.example.client.ClientController.init(ClientController.java:353)
    at com.example.mvc.Controller.register(Controller.java:51)
    at com.example.client.Application.loadComponents(Application.java:153)
    at com.example.client.Application.start(Application.java:139)
    at com.example.client.Application.main(Application.java:166)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    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(Thread.java:722)

解决方法:

我和Java 7一直在看这个,并且想知道它是否是基于另一个人的帖子的Java 7错误(我继续提交错误报告,因为我没有看到任何搜索Java错误数据库) :http://www.java.net/forum/topic/jdk/java-se/webstart-os-x-xstartonfirstthread

我发现的解决方法只是使用Apple提供的Java 6中的javaws,尽管我必须从命令行启动它:
/System/Library/Java/Support/Deploy.bundle/Contents/MacOS/javaws myjnlp.jnlp

标签:java,macos,java-7,swt,java-web-start
来源: https://codeday.me/bug/20191006/1862101.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有