我正在尝试获取基本的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)
程序在OSX下的我的机器上可以正常运行,但是可能丢失了
window.frame.pack();
您尝试过这个吗?
Test window = new Test();
window.frame.pack();
window.frame.setVisible(true);
我在应用程序中使用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();
}
}
Apple在10.6之后的操作系统中不再支持Java:Apple not committing to Java support in Mac OS X 10.7
好像是JRE中缺少库文件或库文件不兼容。
这很奇怪。我尝试了您的示例(没有linux),但没有看到任何问题。因此,正如Wayne提到的那样,可能是macOS问题。
顺便说一句,您正在使用什么Java版本?
另一方面,问题可能出在您未与我们共享的代码中=>很难猜测:)
EDIT:好的,看来您在和我们一起玩“猜我的代码中的内容”游戏:)因为我的假设是未显示代码会导致问题。
[这让我想起了波洛伊特/阿加莎·克里斯蒂的一些侦探小说,其中一些细节可能会对现实产生重大影响。
这是我理论的原因:
import javax.swing. ...
)+ Awt(import java.awt. ...
)-这种组合是常见的使用案例,但是Setting timeout for SWT to 0.100000
)所以对我来说,似乎您正在混合不该混合的东西。Swing
是完全基于OS的Java UI库(最初是Sun制造的),它建立在Awt
之上。但是SWT
是完全不同的Java UI库,它是本机调用与Java的混合(最初是IBM制造的)。
因此,我建议仔细检查您的代码,并确保如果使用JFrame
,则只有Swing
(javax.swing....
)/ Awt
(java.awt. ...
)中存在的库组件。
几天来我一直在想办法解决这个问题,最后找到答案:
''现在已解决-这只是从项目依赖项中删除swt.jar的情况。'
嘿,谢谢!!
就我而言,我试图编写一个使用jPanel的游戏。我需要重写绘画方法,并在主菜单中添加pack();
,它最终向我展示了我尝试绘制的内容。