1

我试图让一个基本的Swing 应用程序在我的Mac OS X 10.8.2(Java 版本 1.6.0_37)机器上运行,每次我尝试从Eclipse运行它时,都会出现框架,但我无法交互用它。

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

4

6 回答 6

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();
    }

}
于 2013-03-06T21:49:30.930 回答
1

该程序在我的机器上运行良好,在 OSX 下,但它可能是丢失的

window.frame.pack();

你试过这个吗?

Test window = new Test();
window.frame.pack();
window.frame.setVisible(true);
于 2012-11-09T19:54:40.727 回答
0

这很奇怪。我尝试了您的示例(没有 linux),但没有发现任何问题。正如韦恩所说,可能是macos问题。

顺便说一句,您使用的 java 版本是什么?

另一方面,问题可能出在您没有与我们分享的代码中 => 难以猜测 :)

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

它让我想起了一些 Poiroit/Agatha Christie 的侦探故事,其中的一个小细节可能会对现实产生重大影响。

这就是我的理论的原因:

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

所以对我来说,你似乎在混合不应该混合的东西。与Swing构建在Awt. 然而SWT,完全不同的 java UI 库是本地调用与 java 的混合(最初是 IBM 制造的)。

因此,我建议仔细检查您的代码,并确保如果您使用JFrame,那么您拥有的唯一库组件来自Swing( javax.swing....) / Awt ( java.awt. ...)。

于 2012-11-09T19:45:56.647 回答
0

几天来,我一直在把头撞在墙上,试图让它工作,终于找到了答案:

“现在已经解决了——这只是从项目依赖项中删除 swt.jar 的一个例子。”

嘿,快!!!!

于 2013-04-16T11:22:36.983 回答
0

Apple 在 10.6 之后的操作系统中不再支持 Java:
Apple 不承诺在 Mac OS X 10.7 中支持 Java

JRE 中似乎缺少或不兼容的库文件。

于 2012-11-09T19:42:18.390 回答
0

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

于 2019-10-14T06:19:40.730 回答