【问题标题】:Java application kills remote Xvnc serverJava 应用程序杀死远程 Xvnc 服务器
【发布时间】:2018-01-04 13:15:42
【问题描述】:

我首先要说我是 Java UI 开发的新手。所有涉及的机器都在运行 RHEL6。 Java 是 OpenJDK 1.7。我有一个应用程序(请原谅拼写错误;我必须从无互联网环境中手动复制):

import javax.swing.*;
import java.awt.*;

class TestApp{
 public static void main(String[] args){
  SwingUtilities.invokeLater(new Runnable(){
   @Override
   public void run(){
    GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font[] fonts = e.getAllFonts();
    for (Font font: fonts){
     System.out.println(font.getFontName());
    }
    JTextArea text_pane = new JTextArea();
    System.out.println("Using " + text_pane.getFont().getFontName());
    text_pane.setText("HI");
    JFrame j = new JFrame();
    j.add(text_pane);
    j.setSize(new Dimension(100,100));
    j.setVisible(true);
   }
  });
 }
}

如您所见,所有这些都是打印所有可用的字体系列,打印默认字体系列,并显示一个带有一些文本的小窗口。当我在本地运行它时,它工作正常。我有一台在显示器上运行 TurboVnc(turbo1.1) 的远程机器:99,使用命令启动

./Xvnc :99 -geometery 1000x1000 -ac

如果我将我的应用程序 scp 到远程机器,导出 DISPLAY=:99.0 并运行它,它可以正常工作。但是,如果我尝试使用导出到 remotehost:99.0 的显示在本地运行我的应用程序,远程 Xvnc 服务器会因双重释放或损坏而崩溃。在回溯中,我看到了一个 AddGlyph 调用。我对 X 的有限经验让我相信这是一个字体问题,即本地运行的应用程序正在尝试使用远程计算机上不可用的字体。

System.out.println("Using " + text_pane.getFont().getFontName());

call 在任一机器上运行时都会打印出相同的字体名称(Dialog.plain),但我不确定这是否真的意味着什么。有没有办法解决这个问题?我完全是从错误的角度来的吗?我应该注意,当从本地机器导出到远程显示器时,xeyes 和 xterm 运行良好,只是我的 Java 应用程序杀死了它。

【问题讨论】:

    标签: java swing fonts vnc


    【解决方案1】:

    如果有人偶然发现:问题是我的 Java 版本足够新,默认启用 xrender,但远程服务器上的 Xvnc 版本旧且不支持它。启动应用程序

    -Dsun.java2d.xrender=false
    

    修复了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-18
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多