2017-07-28 117 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 

修復了這個問題。