Swing Application Window在Mac上没有响应

问题描述 投票:0回答:6

我正在尝试获取基本的Swing Application在我的Mac OS X 10.8.2(Java版本1.6.0_37)计算机上运行,​​并且每次尝试从 Eclipse,将显示框架,但我无法与之交互。

我试图从基本的,干净的开始,在Eclipse (WindowBuilder->Swing Designer->Application Window)中创建一个新的Swing Application Window项目。这将生成以下框架代码:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.BorderLayout;

public class Test {

private JFrame frame;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Test window = new Test();
                window.frame.setVisible(true);
                window.frame.pack();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public Test() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton btnPress = new JButton("Press");
    frame.getContentPane().add(btnPress, BorderLayout.CENTER);
}

}

一切似乎都很好,但是当我从Eclipse运行此程序时,框架不允许我与任何组件进行交互(在我的非示例代码中,有按钮和选项卡)。

而且,在控制台中,我看到类似的东西:

2012-11-09 14:30:27.624 java[8107:707] [Java CocoaComponent compatibility mode]: Enabled

2012-11-09 14:30:27.626 java[8107:707] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000

是否需要更改某些Mac专用设置? (我使用的是最新的默认Mac JRE)

java macos swing windowbuilder swt-awt
6个回答
1
投票

程序在OSX下的我的机器上可以正常运行,但是可能丢失了

window.frame.pack();

您尝试过这个吗?

Test window = new Test();
window.frame.pack();
window.frame.setVisible(true);

1
投票

我在应用程序中使用DJ Swing库时遇到了相同的问题(它使用SWT)。有趣的是,即使我没有明确初始化DJ Swing,也出现了问题。因为我已经添加了DJ Swing初始化,所以它现在可以工作:

public class SwingAppTest {

    public static void main(String[] args) {

        NativeInterface.open();
        UIUtils.setPreferredLookAndFeel();

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame frame = new JFrame("Example");
                frame.getContentPane().setLayout(new BorderLayout());
                frame.setPreferredSize(new Dimension(400, 200));
                frame.setBounds(0,0,200,200);
                frame.setTitle("blah");
                JButton blah = new JButton("blah");
                blah.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        System.out.println("button clicked");
                    }
                });
                frame.getContentPane().add(blah, BorderLayout.CENTER);
                frame.setVisible(true);
            }
        });

        NativeInterface.runEventPump();
    }

}

0
投票

Apple在10.6之后的操作系统中不再支持Java:Apple not committing to Java support in Mac OS X 10.7

好像是JRE中缺少库文件或库文件不兼容。


0
投票

这很奇怪。我尝试了您的示例(没有linux),但没有看到任何问题。因此,正如Wayne提到的那样,可能是macOS问题。

顺便说一句,您正在使用什么Java版本?

另一方面,问题可能出在您未与我们共享的代码中=>很难猜测:)

EDIT:好的,看来您在和我们一起玩“猜我的代码中的内容”游戏:)因为我的假设是未显示代码会导致问题。

[这让我想起了波洛伊特/阿加莎·克里斯蒂的一些侦探小说,其中一些细节可能会对现实产生重大影响。

这是我理论的原因:

  • 显示的代码使用Java swing库(import javax.swing. ...)+ Awt(import java.awt. ...)-这种组合是常见的使用案例,但是
  • 您共享的错误消息显示SWT库错误(Setting timeout for SWT to 0.100000

所以对我来说,似乎您正在混合不该混合的东西。Swing是完全基于OS的Java UI库(最初是Sun制造的),它建立在Awt之上。但是SWT是完全不同的Java UI库,它是本机调用与Java的混合(最初是IBM制造的)。

因此,我建议仔细检查您的代码,并确保如果使用JFrame,则只有Swingjavax.swing....)/ Awtjava.awt. ...)中存在的库组件。


0
投票

几天来我一直在想办法解决这个问题,最后找到答案:

''现在已解决-这只是从项目依赖项中删除swt.jar的情况。'

嘿,谢谢!!


0
投票

就我而言,我试图编写一个使用jPanel的游戏。我需要重写绘画方法,并在主菜单中添加pack();,它最终向我展示了我尝试绘制的内容。

© www.soinside.com 2019 - 2024. All rights reserved.