我在eclipse和平台上开发了软件是ubuntu(linux)。我在程序中使用了古吉拉特字体并完成了它并且它在ubuntu中运行得非常好但是在使用JRE在Windows 7中运行时它无法正常工作。文本将无法正确显示,因为它在ubuntu中使用。我该怎么办?
我也尝试过使用java -Dfileencoding = utf-8,但它无法正常工作。当我在Windows中打开从Ubuntu中挑选的java sorce文件时,文本正常工作并显示。 所以请告诉我正确的工作方式。
答案 0 :(得分:6)
如果要在应用程序中使用自定义字体(在所有操作系统上都不可用),则需要在.jar文件中包含字体文件(otf,ttf等),您可以然后通过此处描述的方法在应用程序中使用该字体:
http://download.oracle.com/javase/6/docs/api/java/awt/Font.html#createFont%28int,%20java.io.File%29
的示例代码GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")));
如果您不确定如何从.jar中提取文件,这是我之前在SO上分享的方法;
/**
* This method is responsible for extracting resource files from within the .jar to the temporary directory.
* @param filePath The filepath relative to the 'Resources/' directory within the .jar from which to extract the file.
* @return A file object to the extracted file
**/
public File extract(String filePath)
{
try
{
File f = File.createTempFile(filePath, null);
FileOutputStream resourceOS = new FileOutputStream(f);
byte[] byteArray = new byte[1024];
int i;
InputStream classIS = getClass().getClassLoader().getResourceAsStream("Resources/"+filePath);
//While the input stream has bytes
while ((i = classIS.read(byteArray)) > 0)
{
//Write the bytes to the output stream
resourceOS.write(byteArray, 0, i);
}
//Close streams to prevent errors
classIS.close();
resourceOS.close();
return f;
}
catch (Exception e)
{
System.out.println("An error has occurred while extracting a resource. This may mean the program is missing functionality, please contact the developer.\nError Description:\n"+e.getMessage());
return null;
}
}
答案 1 :(得分:0)
您需要将字体安装到Windows中 - 或更改应用程序中的字体。您可以通过将其包含在安装过程中来完成此操作。