我无法获取消息框和度数对话框以在Mac(v10.9.5)中正常显示/运行。获取JOptionPane.showConfirmDialog()在Mac OSX上运行
我刚更新了JRE和JDK到最新版本(8u31)。终端窗口中的“java -version”显示我确实使用8u31。 (我以前使用8u20,它表现出相同的行为。)
下面的代码在Windows和我测试的几个不同版本的Linux中完美工作,没有问题。我只是在Mac上遇到问题。我简化我的代码,这是基于SWT,但这个例子中使用Swing,以下几点:
package myTest;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class EntryCode
{
public static EntryCode oEntryCode;
public EntryCode()
{
// TODO Auto-generated constructor stub
}
public static void main(String[] args)
{
oEntryCode = new EntryCode();
oEntryCode.open();
}
public void open()
{
JPanel panel = new JPanel();
panel.setMinimumSize(new Dimension(200,200));
JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
System.out.println("open(): entry - With frame");
JOptionPane.showConfirmDialog(frame, "Wow, works on the Mac!", "Inside open()", JOptionPane.YES_NO_OPTION);
System.out.println("Point 1");
System.exit(0);
}
}
我看到的第一个系统脱节,并且代码挂在消息框请求。在真实代码中,我只是使用null作为第一个参数。这个测试代码的原始版本也使用了null,只是我正在试验指定一个组件。我认为这可能是问题所在。不是这样。
当显示SWT对话框时,有一种倾向,即单击按钮将挂起界面。挂起处于按下按钮和事件处理程序触发之间的某处。事件处理程序从不会触发。
我没有在这里包含一个对话框。我认为,由于我的确认/消息框显示解决问题的相同问题,请免费获取其他问题。
我在Google上搜索过在Mac上显示java应用程序,但没有任何结果。
我认为将JRE/JDK更新到最新版本可以解决任何操作系统相关的问题。
我将代码编译为jar并使用以下命令从终端窗口运行。我按Ctrl + C来完成挂起的应用程序。
的Java -XstartOnFirstThread罐子myTest.jar
的思考?
UPDATE:
我删除了原来的更新,但我离开了原来的问题,现在我明白这个问题更好。
真正的问题是如何启动一个适当的Mac OSX Cocoa限制友好的SWT应用程序,它使用对话框和消息框。 (据我所知,显示消息框的唯一方法是使用JOptionPane.show *,这是一个Swing的东西,因此可以将Swing和SWT混合起来。
有趣的是,问题始终存在与对话框(纯粹是SWT实现)或消息框有关,前者的问题是调用事件处理程序的挂起,后者显示消息框(null为第一个参数,因为不存在Swing框架。在SWT应用程序)
我可以在30分钟内在我的Mac上进行测试。那么我会尽快回复你。哦,也请确保你没有设置任何断点。 – dehlen 2015-02-18 16:11:37
谢谢,但我没有在Mac上运行Eclipse内部的代码。我在Windows上构建代码并使用Ant构建一个jar文件。然后将TeamViewer导入Mac并将jar文件复制到一个文件夹中。然后我使用“java -XstartOnFirstThread -jar”从终端窗口启动应用程序。没有Eclipse,所以不可能设置断点。 –
2015-02-18 16:17:26
我刚刚编译&在我的Mac上运行你的程序,一切正常。看起来像你的Mac/Java设置是错误的。 – dehlen 2015-02-18 16:56:12