无法在Ubuntu上运行Java GUI程序

问题描述 投票:0回答:10

我正在学习 Java 中的 GUI,为此我创建了一个演示程序:

import java.awt.*;

public class FrameDemo extends Frame {

    public FrameDemo(){
        super("Frame Demo");
        setSize(200, 200);
        setVisible(true);
    }

    public static void main(String args[]){
        new FrameDemo();    
    }
}

编译成功。但是当我尝试执行该程序时,我发现了以下错误:

Exception in thread "main" java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173)
    at java.awt.Window.<init>(Window.java:437)
    at java.awt.Frame.<init>(Frame.java:419)
    at FrameDemo.<init>(FrameDemo.java:4)
    at FrameDemo.main(FrameDemo.java:9)

我正在使用 Xubuntu 10.10 并且

java -version
给出:

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.5) (6b20-1.9.5-0ubuntu1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)

我该怎么办?

还有一件事:这与我尝试执行 Dr. Java 和 HJSplit 的 jar 文件时遇到的错误相同。

java swing user-interface ubuntu runtime-error
10个回答
53
投票

Ubuntu 可以选择安装无头 Java——这意味着没有图形库。 情况并非总是如此,但前几天我在 10.10 上尝试运行 Java 文本编辑器时遇到了这种情况。 运行以下命令来安装具有这些库的 JDK:

sudo apt-get install openjdk-6-jdk

编辑:实际上,查看我的配置,您可能需要 JRE。 如果是这种情况,请运行:

sudo apt-get install openjdk-6-jre

10
投票

当我使用

default-jdk
安装
apt
时,我不再遇到此异常。我运行的是 Ubuntu 14.04 (Trusty Tahr),问题似乎是安装了“无头”Java 造成的。我所做的只是:

sudo apt-get install default-jdk

4
投票

以我为例

-Djava.awt.headless=true

已设置(通过 Maven 配置间接设置)。我必须积极使用

-Djava.awt.headless=false

覆盖这个。


2
投票

我的 Ubuntu 机器上也有 OpenJDK

$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.13.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

用 HotSpot VM 替换 OpenJDK 效果很好:

sudo apt-get autoremove openjdk-7-jre-headless

如何在Ubuntu(Linux)上安装JDK


0
投票

检查您的环境变量 DISPLAY 的值是什么。尝试从命令行运行一个简单的 X 应用程序。如果有效,请检查 DISPLAY 的值是否正确。

您可以通过在命令行上执行以下操作,在每次调用的基础上尝试不同的 和 环境变量值:

DISPLAY=:0.0 <your-java-executable-here>

你如何调用你的程序?


0
投票

我会咨询另一个 Java 实现/供应商。最好是 Oracle/Sun Java:http://www.java.com/en/。不幸的是,开源实现以奇怪的方式有所不同。


0
投票

使用“env”命令检查您的 X Window 环境变量。


0
投票

使用 JFrame 而不是 Frame。并且不要从 JFrame 扩展。只需编写一个具有名为

gui
的 JFrame 属性的类,该类使用可用的方法配置此 JFrame,因为这样做是更好的风格。在这里扩展 OOP 的使用是错误的。


0
投票

对于那些像我一样尝试在 Linux 上运行微模拟器并得到像主要问题一样的错误的人。运行以下命令:

sudo apt remove openjdk-*-headless

sudo apt install openjdk-11-jdk

export DISPLAY=:0

java -jar microemulator.jar

-2
投票

这个命令对我有用。

Sudo dnf install java-1.8.0-openjdk
(软呢帽)

Sudo apt-get install java-1.8.0-openjdk

应该适用于 Ubuntu。

© www.soinside.com 2019 - 2024. All rights reserved.