2016-06-01 66 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