我正在尝试在我的 Mac OS X 10.8.2 (Java版本1.6.0_37)计算机上运行基本的 Swing应用程序,每次我尝试从 Eclipse 运行它,框架出现,但我无法与它交互。
我试图从一个基本的,干净的平台开始,在 Eclipse (WindowBuilder->Swing Designer->Application Window)
中创建一个新的 Swing应用程序窗口项目。这会生成以下框架代码:
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)
答案 0 :(得分:1)
程序在OSX下的我的机器上运行正常,但它可能是缺少的
window.frame.pack();
你试过这个吗?
Test window = new Test();
window.frame.pack();
window.frame.setVisible(true);
答案 1 :(得分: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();
}
}
答案 2 :(得分:0)
Apple在10.6之后不再支持Java操作系统了:
Apple not committing to Java support in Mac OS X 10.7
似乎是JRE中缺少或不兼容的库文件。
答案 3 :(得分:0)
顺便问一下,你正在使用的java版本是什么?
另一方面,问题可能出在您未与我们分享的代码中=>很难猜到:)
编辑:好的,所以看起来你正在玩“猜猜我的代码中有什么”和我们玩游戏:)我的假设是代码没有显示会导致问题。
这让我想起了一些Poiroit / Agatha Christie的侦探故事,其中只有一些细节可能会对现实产生重大影响。
这就是我理论的原因:
import javax.swing. ...
)+ Awt(import java.awt. ...
) - 这种组合是一种常见的用例,但是Setting timeout for SWT to 0.100000
)所以对我来说,似乎你在混合那些永远不应该混合的东西。
由于Swing
是完全独立于操作系统的java UI库(最初是Sun制造的),它建立在Awt
之上。但是SWT
是完全不同的java UI库,它是一种原生调用与Java混合(最初是IBM制造的)。
因此我建议仔细检查您的代码并确保如果您使用JFrame
,那么您拥有的唯一库组件来自Swing
(javax.swing....
)/ {{ 1}}(Awt
)。
答案 4 :(得分:0)
我几天试图让这个工作起来,我一直在撞墙,终于找到了答案:
'它现在已经解决了 - 这只是从项目依赖项中删除swt.jar的一种情况。'
嘿presto !!!!
答案 5 :(得分:0)
就我而言,我试图编写一个使用jPanel的游戏。我需要重写绘画方法,并将pack();
添加到主体中,它最终向我展示了我尝试绘制的内容。