【发布时间】:2019-03-20 13:53:36
【问题描述】:
您好,我在我的 Mac 上需要 Java 方面的帮助。我已经完全卸载了所有版本的 Java 并安装了 Oracle JDK 1.8.0_202。我可以做 javac 和 java - 并编译和运行在控制台中运行的简单程序。但是 - 当我尝试使用窗口进行任何操作时 - 它会挂起。
这包括所有 gui 应用程序、java web 启动,甚至 Java 控制面板都不会启动 - 它只是停止响应并且不显示任何内容。
这个简单的应用程序也表现相同:
import javax.swing.*;
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
我已经尝试过重新安装、重新启动等任何操作,但我仍然无法让这个简单的程序运行。我在运行它的终端中没有收到错误消息 - 它只是冻结了。
请帮我解决这个问题并获得一个有效的 java 设置。
我正在使用装有 Mojave 10.14.3 的 Macbook pro
【问题讨论】:
-
我已经很久没有用 Swing 做点什么了,所以我可能错了,但
invokeLater不是打算用于 GUI 线程中的长时间运行任务吗?我认为它不应该用于调用 GUI 线程本身。尝试从您的主目录中简单地调用createAndShowGUI()。 -
我刚刚运行了您的代码,它运行良好 - 在屏幕左上角显示了一个窗口(您很容易错过它)。你确定你只是没有错过它或它隐藏在其他窗口后面吗?添加 frame.setSize(1000, 1000);只是为了测试以确保。
-
@AndréStannek 是倒退的。 invokeLater 在 EDT 上运行任务,您不需要长时间运行的任务。
-
我确定 - 没有运行窗口,如果我将鼠标悬停在标题栏左侧上方的程序名称上,它只会显示一个永不停止的微调器,并在活动监视器中显示因为没有回应。这对于所有其他 GUI Java 应用程序都是一样的
标签: java swing user-interface