2016-06-01 67 views
0

我有服務器上運行的java 1.4應用程序。 我需要在創建包含它們的pdf文件之前計算字符串的寬度。 當在本地運行應用程序(在我的電腦上)它是o.k. ,但是當我在服務器上運行它,我得到一個錯誤:計算字符串寬度java 1.4

Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY 
variable. 
     at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) 
     at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:77) 
     at java.lang.Class.forName1(Native Method) 
     at java.lang.Class.forName(Class.java:142) 
     at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:72) 
     at java.awt.Font.initializeFont(Font.java:285) 
     at java.awt.Font.<init>(Font.java:319) 

,創造該問題的代碼計算一個字符串的寬度如下:

protected static String mCutStr(String iText , int iWidthPt , int iEstimatedNumOfChars) 
    { 
     iWidthPt = iWidthPt-4; //remove padding 

     AffineTransform affinetransform = new AffineTransform();  
     FontRenderContext frc = new FontRenderContext(affinetransform,true,true);  
     Font font = new Font("Times", Font.PLAIN, 9); 
     int textwidth = (int)(font.getStringBounds(iText, frc).getWidth()); 
    // System.out.println("iText="+iText+"; textwidth = "+textwidth+" iWidthPt ="+iWidthPt); 
     if(textwidth <= iWidthPt) 
      return iText; 
     String vTestStr = iText.substring(0 , iEstimatedNumOfChars)+">>"; 
     textwidth = (int)(font.getStringBounds(vTestStr, frc).getWidth()); 
     while(textwidth < iWidthPt) 
     { 
      iEstimatedNumOfChars++; 
      vTestStr = iText.substring(0 , iEstimatedNumOfChars)+">>"; 
      textwidth = (int)(font.getStringBounds(vTestStr, frc).getWidth()); 
    // System.out.println("vTestStr="+vTestStr+" textwidth = "+textwidth); 
     } 
     vTestStr = iText.substring(0 , iEstimatedNumOfChars-1)+">>"; 
     return vTestStr; 
    } 

是否有其他的方式來calc下這不使用AWT? (它必須支持最小Java 5)

+0

的[Java的可能的複製能」 t使用'localhost:10.0'作爲DISPLAY變量的值連接到X11窗口服務器](http://stackoverflow.com/questions/10165761/java-cant-connect-to-x11-window-server-using-localhost10 -O-作爲最值的-T) – Berger

回答

0

您需要以無頭模式運行您的服務器。當像X服務器這樣的實際窗口系統不可用並且您需要執行一些與AWT相關的功能時,無頭模式非常有用。

Java Documentation about Headless mode

如果您使用的網絡服務器如Tomcat搜索如何在無頭的模式下執行該特定服務器

OR 一套系統環境屬性java.awt.headlesstrue