Ant <input />不再适用于Eclipse Helios(3.6)

时间:2010-07-15 06:44:18

标签: eclipse macos ant multithreading

我的Eclipse项目中有一个构建文件。此文件执行的操作之一是使用<input/>标记通过提示询问问题。自升级到Eclipse Helios以来,这不再有效,因为我收到以下错误:

[input] ***WARNING: Display must be created on main thread due to Cocoa restrictions.

Invalid thread access

如何解决此错误?

3 个答案:

答案 0 :(得分:3)

看起来像 bug 303869

  

我已向Apple提交了功能请求:错误ID#7840189   如果我们有可能通过这个新的Dispatch在主线程上运行显示代码   对象/方法,我认为SWT可以在不改变太多代码的情况下在applet中工作,不是吗?

同时检查bug 288436以查看它是否与您的情况相关。

答案 1 :(得分:2)

关于我之前的回答,这两个错误现在都已关闭。

特别是

bug 303869本月早些时候关闭了:

  

我认为我们可以关闭这个错误,现在可以使用最新的Mac OS X 10.6 Java更新。
  我们可以在主线程上执行代码,现在显示UI。在applet中,我们使用如下代码来实例化显示:

com.apple.concurrent.Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute(
new Runnable(){

            @Override
            public void run() {

                if( dDisplay == null )
                {
                    dDisplay = Display.getDefault();    
                    sShell  = SWT_AWT.new_Shell(dDisplay, cCanvas);
                    mLogger.info("Display is created");
                }
...
            } 
        } );
...
  

感谢所有人,尤其是来自Apple的Mike解决了这个问题   与SWT IMHO没什么关系。


bug 288436

  

是的,JNLP文件有一个小错误,触发了问题   在没有任何其他属性的“<j2se version="1.6*" />”标记中指定“<resources>”会丢弃JNLP解析器并导致后面的行“<j2se version="1.6*" java-vm-args="-XstartOnFirstThread"/>”被忽略。
  这两行最终指向两个独立的JVM,第一个规范是“获胜”。该规范上没有VM参数,因此JVM正常启动,并且SWT加载在错误的线程上。


bug 211625中提到了-XstartOnFirstThread选项:

  

这是必需的,因为Cocoa要求所有用户事件调度必须在线程0上发生。
  如果没有-XstartOnFirstThread,Display将在非主线程上创建NSApplication,并且SWT将无法从非主线程中提取和分派事件。

使用-XstartOnFirstThread选项时要小心:谎言bug mentions

  

原因是新的开发者模式在Swing中实现,旧的托管模式在SWT中实现。
   SWT要求-XstartOnFirstThread在Mac上运行   但是这会破坏任何使用Swing的java程序。

     

因此,您无法从2.0版本向前添加-XstartOnFirstThread。然而,在旧版本中,它仍然是一项要求。

答案 2 :(得分:1)

最后找到了解决这个问题的方法:

首先,确保您的Java版本是最新的(编写本文时的1.6.0.20)。其次,通过执行以下操作来更改Ant运行时参数:

  1. 打开:运行&gt;外部工具&gt;外部工具配置
  2. 选择您的构建文件
  3. 打开JRE标签
  4. 在VM参数输入框中,添加以下内容:-XstartOnFirstThread