Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动应用程序时,在Mac上挂起缩放的桌面。既有Swing&;SWT_Java_Macos_Swing_Swt_Swt Awt - Fatal编程技术网

Java 启动应用程序时,在Mac上挂起缩放的桌面。既有Swing&;SWT

Java 启动应用程序时,在Mac上挂起缩放的桌面。既有Swing&;SWT,java,macos,swing,swt,swt-awt,Java,Macos,Swing,Swt,Swt Awt,我在Mac电脑上(用10.6.4、10.7.5和10.8.2测试),桌面被放大。在使用Swing和SWT的Java应用程序时,窗口一开始就冻结了。这个问题也可以通过SWT网页上提供的代码片段337进行复制(这里是一个示例) 有人知道如何解决这个问题吗?谢谢 编辑-解决方案1 如果我将setVisible包含在asyncExec中,并且不使用SWT_AWT shell,而是像这样使用普通shell: .... display.asyncExec(new Runnable() { @Overr

我在Mac电脑上(用10.6.4、10.7.5和10.8.2测试),桌面被放大。在使用Swing和SWT的Java应用程序时,窗口一开始就冻结了。这个问题也可以通过SWT网页上提供的代码片段337进行复制(这里是一个示例)

有人知道如何解决这个问题吗?谢谢

编辑-解决方案1

如果我将setVisible包含在asyncExec中,并且不使用SWT_AWT shell,而是像这样使用普通shell:

....
display.asyncExec(new Runnable() {
   @Override
   public void run() {
      mainFrame.pack();
      mainFrame.setVisible(true);
   });
....
launchBrowserButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
      display.asyncExec(new Runnable() {
         public void run() {
            Shell shell = new Shell(display);
            shell.setSize(800, 600);
            Browser browser = new Browser(shell, SWT.NONE);
            ...
         }
      });
   }
});
对于这个简单的示例,它似乎很有效,但在我的应用程序中,它仍然挂起在EDQ中调度的某个事件,因此不是一个解决方案

解决方案2

如果我替换EventQueue以在Thread0中分派事件,它也适用于这个小示例,它也成功地启动了我的复杂应用程序,但是稍后这个队列替换会产生一些其他随机错误

...
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEDQ());
...
class MyEQD extends EventQueue {
   @Override
   protected void dispatchEvent( AWTEvent arg0) {
      final AWTEvent event = arg0;
      A.display.asyncExec(new Runnable() {
         @Override
         public void run() {
            MyEQD.super.dispatchEvent(event);           }
         });
      }
   }
}
...
还有人知道如何更优雅地解决Thread0和EventDispatchThread之间的同步问题,这样我就不会遇到其他问题了

....
display.asyncExec(new Runnable() {
   @Override
   public void run() {
      mainFrame.pack();
      mainFrame.setVisible(true);
   });
....
launchBrowserButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
      display.asyncExec(new Runnable() {
         public void run() {
            Shell shell = new Shell(display);
            shell.setSize(800, 600);
            Browser browser = new Browser(shell, SWT.NONE);
            ...
         }
      });
   }
});
...
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new MyEDQ());
...
class MyEQD extends EventQueue {
   @Override
   protected void dispatchEvent( AWTEvent arg0) {
      final AWTEvent event = arg0;
      A.display.asyncExec(new Runnable() {
         @Override
         public void run() {
            MyEQD.super.dispatchEvent(event);           }
         });
      }
   }
}
...