Platform, Locale, and Platform Name must not be null エラーに関する参考情報

ColdFusionのスタートアップ時や特定の処理を実行した際に、ColdFusionの標準出力ログ(coldfusion-out.log)やapplication.logなどに、「Platform, Locale, and Platform Name must not be null」エラーが発生する場合があります。このエラーの詳細と回避方法に関して、参考情報としてこちらで確認した限りの情報をお知らせします。

こちらで確認した限り、「Platform, Locale, and Platform Name must not be null」エラーは、OSのシステム内に含まれているフォントが原因で発生しているようです。こちらで現象を確認したColdFusion 10では、起動時に coldfusion-out.log に下記のエラーが出力されていました。

  • coldfusion-out.log の該当エラーの抜粋
    ...
    2 3, 2014 11:21:39 午前 Information [pool-2-thread-1] - ColdFusion が開始しました
    2 3, 2014 11:21:39 午前 Information [pool-2-thread-1] - ColdFusion: アプリケーションサービスが使用可能になりました
    02/03 11:21:39 INFO Macromedia Flex Build: 87315.134646
    2 3, 2014 11:21:53 午前 Error [Thread-14] - Platform, Locale, and Platform Name must not be null
    2 3, 2014 11:21:53 午前  [] - 
    ...
     

また、起動時だけでなく、ColdFusionで処理を行う際にもこのエラーやそれに付随するエラーが発生する場合があります。下記は、<cfpdf>タグを使って PDF にヘッダー文字を追加しようとした際に発生するエラーとなります。

 

  • coldfusion-out.logに出力されたエラー例
    ...
    02/03 11:23:53 [catalina-exec-3] WARN PDFM_W19001: No remote FontManager class - using local defaults.
    02/03 11:23:53 [catalina-exec-3] WARN PDFM_W19004: The additional font &quot; .. / imports / adobe / fontbundle / customer &quot; could not be loaded.
    com.adobe.fontengine.font.FontLoadingException: java.io.FileNotFoundException: .. \ imports \ adobe \ fontbundle \ customer (指定されたパスが見つかりません。)
      at com.adobe.fontengine.fontmanagement.FontLoader.load(Unknown Source)
      at com.adobe.internal.pdfm.util.FontSetBuilder.loadFontsPath(FontSetBuilder.java:385)
    ...

上記のエラーは、 <cfpdfform> タグや Apache Solr を使ったPDFファイルのインデックス作成時(<cfindex>タグ)にも、発生することが確認されています。

上記のエラーメッセージから、com.adobe.fontengine.fontmanagement.FontLoaderクラスのload処理でエラーが発生していることが推測されます。こちらで確認した限りでは、load処理でエラーが発生するFontをシステムフォントから取り除いてColdFusionを再起動することで回避が可能でした。

エラーが発生するFontを調べる方法としては、下記のメーカーフォーラムに掲載されていたプログラムを参考にしました。

  • 参考URL
    • http://forums.adobe.com/message/4850814

      ※3つめの返信に書かれているプログラムを下記に抜粋しました

      ※フォントが格納されているパスが異なる場合は、実行環境に合わせて変更してください

      <cfset fontobj = createobject("java","com.adobe.fontengine.fontmanagement.FontLoader") >
      <cfdirectory action="list" directory="c:\windows\fonts" name="fontdir">
      
      <table border="1" style="border-collapse:collapse">
        <tr>
          <th>Font Name:</th>
          <th>Error</th>
        </tr>
        <cfloop query="fontdir">
        <cftry>
          <cfset loaded = fontobj.load(createobject("java","java.net.URL").init("file:///C:/windows/fonts/#fontdir.name#"))>
          <cfif arraylen(loaded) gt 0>
            <cfset dummy="#loaded[1].getPlatformFontDescription()[1].toString()#" >
          </cfif>
          <cfcatch>
            <cfif findnocase("platform",cfcatch.message)>
              <tr>
                <td><cfoutput>#fontdir.name#</cfoutput></td>
                <td><cfoutput>#cfcatch.message#</cfoutput></td>
              </tr>
            </cfif>
          </cfcatch>
        </cftry>
        </cfloop>
      </table>

 

プログラムを実行すると、OSのシステム内に含まれているフォント一つ一つに対して、com.adobe.fontengine.fontmanagement.FontLoaderクラスのload処理が行われます。問題がある Font が存在する場合は、エラーが発生しますが、それをCFTRY~CFCATCHの例外処理で画面に出力する内容となっています。プログラムの実行例は下記となります。

  • 実行イメージ<例>

 

画面に表示された Font ファイル名を確認し、その対象となるフォントをOSのフォントフォルダから取り除く(他のディレクトリに移動する)ことで、エラーを回避する事ができました。

※OSのフォントフォルダから対象Fontを取り除こうとしてエラーが発生する場合があります。その場合は、OSを再起動してください。

 

最後に、上記の内容はこちらで確認した限りの情報となります。今回記載した以外の要因で同様のエラーが発生する可能性もございます事を予めご了承願います。

 


 


記事公開日:2014年02月05日
最終更新日:2014年02月05日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.