2017-07-28 118 views
0

,我会说我是比较新的的Java UI开发启动这一关。所有涉及的机器都运行RHEL6。 Java是OpenJDK 1.7。我有一个应用程序(请原谅错别字,我不得不手工复制从internetless环境这一点):Java应用程序远程杀死的Xvnc服务器

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我的应用程序到远程机器,出口显示器=:99.0,并运行它,它的工作原理精细。但是,如果我尝试与显示在本地运行我的应用程序导出到远程主机:99.0,远程的Xvnc服务器崩溃了双自由或损坏。在回溯我看到一个AddGlyph电话。我有限的与X的经历使我相信这是一个字体的问题,即在本地运行的应用程序试图使用远程计算机上不可用的字体。该

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

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

回答

0

如果有人绊倒这样的:问题是我的Java版本够新,它使XRENDER默认,但在远程服务器上使用Xvnc的版本是旧的,不支持它。用

发起申请
-Dsun.java2d.xrender=false 

修复了这个问题。