在blackberry中定制字体问题

在blackberry中定制字体问题,blackberry,java-me,fonts,styles,Blackberry,Java Me,Fonts,Styles,在应用程序中,我必须使用自定义字体。首先,我创建了一个扩展VerticalFieldManager类的类。在这个类中,我想使用自定义字体。我有一个TTF文件(名字是AGENCYB.TTF)。我把这个文件保存在res/img文件夹中。要加载此文件,我使用以下代码: if (FontManager.getInstance().load("AGENCYB.TTF", "MyFont", FontManager.APPLICATION_FONT) == FontManager.SUCCE

在应用程序中,我必须使用自定义字体。首先,我创建了一个扩展VerticalFieldManager类的类。在这个类中,我想使用自定义字体。我有一个TTF文件(名字是AGENCYB.TTF)。我把这个文件保存在res/img文件夹中。要加载此文件,我使用以下代码:

if (FontManager.getInstance().load("AGENCYB.TTF", "MyFont",
        FontManager.APPLICATION_FONT) == FontManager.SUCCESS)
{
   System.out.println("**************************IF SUCCESS*******");
   try
   {
      FontFamily typeface = FontFamily.forName("MyFont");
      myFont = typeface.getFont(Font.BOLD, 50);
      label2.setFont(myFont);
   }
   catch (ClassNotFoundException e)
   {
      System.out.println(e.getMessage());
   }
}
但它不会改变标签字段的字体。我使用以下链接实现了代码:

任何想法都会大有帮助

谢谢

************编辑**************

if (FontManager.getInstance().load("AGENCYB.TTF", "AGENCYB", FontManager.APPLICATION_FONT) == FontManager.SUCCESS)
首先,

其次,在API文档所说的
FontManager.load()
返回的任何值中,我都没有看到8的返回码
SUCCESS
的值为0,因此您没有成功调用
load()

返回
FontManager.SUCCESS,如果字体加载成功
如果加载的字体太多,则FontManager.FONTS_数组_已满
字体名称无效时,FontManager.缺少字体名称。 FontManager.DUPLICATE\u如果字体名称重复,则使用该名称
FontManager.DUPLICATE_数据(如果字体数据重复)
FontManager.NO_FONT_数据如果找不到字体数据
如果字体数据大小超过60k,则FontManager.com将超过_限制
如果找不到字体文件,则FontManager.MISS_资源
如果字体数据无效或字体格式无效,FontManager.u加载文件失败

在OS 5.0和7.1上运行调试器时,我看到
-8
等于
FontManager.DUPLICATE_NAME
,但没有看到任何代码等于
8

另外,您是否自己生成了这个字体文件(AGENCYB.TTF)?因为代码要求在AGENCYB.TTF文件中使用名为MyFont的字体。我不希望一种字体真正被命名为MyFont,除非它是编写Hello World程序(以及自制的.ttf文件)的人

如果这是一种自定义字体,由第三方字体库提供,或从其他人处购买,我希望字体名称不是MyFont,这是您可能从BlackBerry示例中复制代码的内容

所以,仔细检查一下,如果仍然不起作用,请告诉我们


更新:由于在代码中使用字符串
“AGENCYB”
时也会失败,我认为问题在于您使用了错误的字体名称。即使文件是
AGENCYB.TTF
,我打赌该文件中的字体名是而不是
AGENCYB
。这是否与您在Windows中的
C:\Windows\font
下找到的文件相同?如果是这样,您可以使用Windows(至少7)查看字体文件

只需在Windows资源管理器中双击.ttf文件,它将为您提供一个预览,显示正确的字体名称名称是您在两个java调用中使用的名称,其中示例代码有
“MyFont”
。在本例中,您会看到字体名称可能是
“Agency FB”
。试试看


更新2:我还尝试从windows 7机器上的
C:\windows\font\AGENCYR.TTF
文件中加载代理FB字体。这段代码在5.0 8900模拟器上为我工作:

  int result = FontManager.getInstance().load("AGENCYR.TTF", "Agency FB", FontManager.APPLICATION_FONT);

  if (result == FontManager.SUCCESS)
  {
     try 
     {
        FontFamily typeface = FontFamily.forName("Agency FB");
        Font myFont = typeface.getFont(Font.PLAIN, 50);
        helloWorld.setFont(myFont); 
     }
     catch (ClassNotFoundException ex) 
     {
     }
  }
首先

其次,在API文档所说的
FontManager.load()
返回的任何值中,我都没有看到8的返回码
SUCCESS
的值为0,因此您没有成功调用
load()

返回
FontManager.SUCCESS,如果字体加载成功
如果加载的字体太多,则FontManager.FONTS_数组_已满
字体名称无效时,FontManager.缺少字体名称。 FontManager.DUPLICATE\u如果字体名称重复,则使用该名称
FontManager.DUPLICATE_数据(如果字体数据重复)
FontManager.NO_FONT_数据如果找不到字体数据
如果字体数据大小超过60k,则FontManager.com将超过_限制
如果找不到字体文件,则FontManager.MISS_资源
如果字体数据无效或字体格式无效,FontManager.u加载文件失败

在OS 5.0和7.1上运行调试器时,我看到
-8
等于
FontManager.DUPLICATE_NAME
,但没有看到任何代码等于
8

另外,您是否自己生成了这个字体文件(AGENCYB.TTF)?因为代码要求在AGENCYB.TTF文件中使用名为MyFont的字体。我不希望一种字体真正被命名为MyFont,除非它是编写Hello World程序(以及自制的.ttf文件)的人

如果这是一种自定义字体,由第三方字体库提供,或从其他人处购买,我希望字体名称不是MyFont,这是您可能从BlackBerry示例中复制代码的内容

所以,仔细检查一下,如果仍然不起作用,请告诉我们


更新:由于在代码中使用字符串
“AGENCYB”
时也会失败,我认为问题在于您使用了错误的字体名称。即使文件是
AGENCYB.TTF
,我打赌该文件中的字体名是而不是
AGENCYB
。这是否与您在Windows中的
C:\Windows\font
下找到的文件相同?如果是这样,您可以使用Windows(至少7)查看字体文件

只需在Windows资源管理器中双击.ttf文件,它将为您提供一个预览,显示正确的字体名称名称是您在两个java调用中使用的名称,其中示例代码有
“MyFont”
。在本例中,您会看到字体名称可能是
“Agency FB”
。试试看


更新2: if(FontManager.getInstance().load("TickingTimebombBB_ital.ttf", "Ticking Timebomb BB", FontManager.APPLICATION_FONT) == FontManager.DUPLICATE_NAME){ Logger.debug("---font already loaded-----"); try { System.out.println("---load once more---"); FontFamily typeface = FontFamily.forName("Ticking Timebomb BB"); Font myFont = typeface.getFont(Font.PLAIN, 80); lbl.setFont(myFont); } catch (ClassNotFoundException e) { Logger.error("---error-----"+e.getMessage()); } }
else if(FontManager.getInstance().load("TickingTimebombBB_ital.ttf", "Ticking Timebomb BB", FontManager.APPLICATION_FONT) == FontManager.SUCCESS) {
            try 
            {
                Logger.debug("---load first time---");
                FontFamily typeface = FontFamily.forName("Ticking Timebomb BB");
                Font myFont = typeface.getFont(Font.PLAIN, 80);
                lbl.setFont(myFont); 
            }
            catch (ClassNotFoundException e) 
            {
                Logger.error("---error-----"+e.getMessage());
            }

    }