Java应用程序杀死远程Xvnc服务器

时间:2017-07-28 12:48:50

标签: java swing fonts vnc

我将首先说我对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());
当在任一机器上运行时,

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

1 个答案:

答案 0 :(得分:0)

如果有人发现这个问题:问题是我的Java版本是新的,它默认启用xrender,但远程服务器上的Xvnc版本是旧的并且不支持它。使用

启动应用程序
-Dsun.java2d.xrender=false

解决了这个问题。