我正在尝试运行以前运行过的不同 java-swing 程序,但我无法从命令行启动它们,而不会出现此错误:
java GuessGame
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:112)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at java.awt.Toolkit$2.run(Toolkit.java:849)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841)
at sun.swing.SwingUtilities2$AATextInfo.getAATextInfo(SwingUtilities2.java:121)
at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1564)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:147)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1599)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:530)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:570)
at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1320)
at javax.swing.UIManager.initialize(UIManager.java:1407)
at javax.swing.UIManager.maybeInitialize(UIManager.java:1395)
at javax.swing.UIManager.getDefaults(UIManager.java:644)
at javax.swing.UIManager.getString(UIManager.java:790)
at javax.swing.UIManager.getString(UIManager.java:807)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:476)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:442)
at IO.input(GuessGame.java:10)
at Player.createPlayer(GuessGame.java:26)
at GuessGame.init(GuessGame.java:52)
at GuessGame.main(GuessGame.java:85)
我没有显示源代码,因为它以前运行过,还有十几个其他程序,并且没有改变。
您可能会在 Google 上搜索错误消息,并找到建议以无头模式启动 Java。这不适用于此处,因为那里,其理念是,在服务器上进行图形处理,可能生成图表或转换图形,这通常需要显示。然后您可以指定“headless”,因为服务器上没有显示任何内容。这里正好相反:我希望显示我的框架,并且我有一个 DISPLAY=:0.0,其中我的 xterm(例如 xfce4)正在运行。我甚至可以从菜单启动 eclipse。
同样,出于同样的原因,这个建议unset DISPLAY
对我来说也不适用。我需要使用显示器,它已经启动并且响应迅速 - 我现在正在那台机器上使用 Firefox。
echo $DISPLAY
:0.0
尝试从像 verve-comamndline 这样的特殊输入运行也不起作用。
这对我来说是个谜。Xorg.0.log 也没有显示任何有趣的东西。
答案1
我不记得我在这台电脑上激活了 OpenJDK,最近才切换到它。
在 steaberts 评论之后,我很快找到了解决方案:
update-java-alternatives -l
java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun
java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
java-6-sun 63 /usr/lib/jvm/java-6-sun
^ 这是安装
sudo update-java-alternatives -s java-6-sun
^ 已切换到 suns java(以前称为 oracle :) )
并且: Bingo:不再有错误消息,程序运行。
如果有人有 OpenJDK 的解决方案:不客气。但我不再那么感兴趣,也不会花几个小时测试这个。:)
不过:你太棒了!
答案2
openjdk 为我工作:
在主机上输入:
$ xhost local: