gpt4 book ai didi

java - 让 JOptionPane.showConfirmDialog() 在 Mac OSX 上运行

转载 作者:行者123 更新时间:2023-11-30 08:15:59 25 4
gpt4 key购买 nike

我无法在 Mac (v10.9.5) 中获取消息框和某种程度上的对话框以正常显示/运行。

我刚刚将 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 -jar myTest.jar

想法?

更新:

我删除了原来的更新但留下了原来的问题,现在我对问题有了更好的理解。

真正的问题是如何启动一个适当的 Mac OSX Cocoa 限制友好的 SWT 应用程序,它使用对话框和消息框。 (据我所知,显示消息框的唯一方法是使用 JOptionPane.show*,它是 Swing 的东西,因此有点混合了 Swing 和 SWT。

有趣的是,问题总是与按钮有关,无论是对话框(纯 SWT 实现)还是消息框。在前者中,问题是调用事件处理程序挂起,而后者显示消息框(第一个参数为空,因为 SWT 应用程序中不存在 Swing 框架)。

最佳答案

问题可能是您没有在 EDT 中启动 GUI。试试这个:

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
oEntryCode = new EntryCode();
oEntryCode.open();
}
});
}

更多信息:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

另一个问题是在 Swing 中使用 -XstartOnFirstThread。 Swing 的作用与 -XstartOnFirstThread 的作用相同,但以其自己的方式。您不应该将 -XstartOnFirstThread 与 Swing 一起使用,因为混合使用 SWT 和 Swing 不是一个好主意。

如果您添加 SwingUtilities.invokeLater() 并删除 -XstartOnFirstThread,您的示例应该会正常运行。

关于java - 让 JOptionPane.showConfirmDialog() 在 Mac OSX 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com