ブラウザにレポートを表示しようとしていますが、次のエラーが発生します。
これについて奇妙なことは、サーバーにインストールされているバージョンからレポートを生成しようとしたときにのみ発生し、PCからローカルで実行したときに発生しないことです。
これがなぜ起こっているのかあなたは何か考えがありますか?
これはヘッドレスモードの問題のようです。 Java.awt.headless
プロパティをtrue
に設定する必要があります。それは以下を使用して行うことができます:
static {
System.setProperty("Java.awt.headless", "true");
}
または、Tomcat起動コマンドのheadlessプロパティを-Djava.awt.headless=true
として設定します
また、これが必要な理由について詳しく読むことができます。ヘッドレスモードについて読むこともできます こちら
これは、見つからない/アクセスできないJava 'temp'ディレクトリです。Font.Javaでは、一時ファイルが作成されています。
Files.createTempFile("+~JF", ".tmp").toFile();
1つのシステムでは、Tomcatフォルダーの下に 'temp'ディレクトリーがありませんでしたが、Javaはそれを使用するように構成されていました:
-Djava.io.tmpdir=C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\temp
ところで。初めて、Tomcatを再起動した後、サービスは実際にはIOExceptionをスローしていましたが、JasperReportsが何かをキャッシュし、その後の呼び出しでスタックトレースがここで報告されたとおりでした。
これは、クラスパスの問題で欠落しているjarです。
私はこの問題を抱えていて、不足しているjarをクラスパスに追加することで問題が解決したことを発見しました。
以下の記事から Java.dzone.com記事 必要な最小限のjarファイルは...であることがわかりました。
まだこの問題が発生している人のために:ヘッドレスOpenJDK JREを備えたUbuntu Server 12.04で、それは単に解決されました
apt-get install ttf-dejavu-extra
Dockerコンテナーにスプリングブートアプリ(jasperレポートを含む)をデプロイしているときにこのエラーが発生しました。問題は、Dockerコンテナー環境の構築に使用したopenjdk:8-jdk-Alpineにありました。フォントのサポートにバグがあります。したがって、私はopenjdk:8-jreに切り替え(またはOpenJDK 7バージョンも役立ちます)、それは私にとってはうまくいきました。 このバグを修正するために何日も費やしました。
この問題を解決するには、次のようにします。
これはメモリの問題である可能性があります。サーバーを再起動してください。
少し遅れましたが、これがこの問題が発生した理由です...最近、EclipseではなくIntelliJを使用して開発を開始しました。 IntelliJを管理者として実行するのを忘れただけです... Eclipseでこれをすでに長い間行っていましたが、IntelliJでそれについて考えていませんでした。結局のところ、Cドライブで読み取り/書き込みを行うための十分な権限がないため、フォントが見つからなかったか、フォルダが見つからなかったと思います。
私の場合、問題は、Dockerイメージのビルドに使用していたjdk8にありましたが、検索を行った後、jreに切り替えました。これでバグが修正されました。 jdk8を使用する代わりに、任意の画像を試すことができると思います。
私にとっての問題は、AdoptOpenJDK
のバグに関するものでした: https://github.com/AdoptOpenJDK/openjdk-build/issues/682
Dockerfileにttf-dejavu
を手動でインストールして問題を修正しました
FROM adoptopenjdk/openjdk8:Alpine-jre
# Workaround for wrong font configuration in adoptopenjdk
# https://github.com/AdoptOpenJDK/openjdk-build/issues/682
RUN apk update && apk upgrade \
&& apk add --no-cache ttf-dejavu \
# Install windows fonts as well. Not required..
&& apk add --no-cache msttcorefonts-installer \
&& update-ms-fonts && fc-cache -f
フラグ-Djava.awt.headless=true
を使用してアプリケーションを実行する
私は同じ問題を数時間検索しましたが、私の解決策は他のどれにも言及されていません。
Jasperレポートのバージョンが不適切に更新されたため、クラスパスに複数のバージョンのjasperreports jarファイルがありました。 jasperreports jarファイルが1つだけあることを確認してください...
私たちの場合、一時サーバーを削除して(jarの重複がないことを確認する)、サーバーを再起動することができました。ヒント:エラーが新しいリリースの後に発生し始めた場合にこれを試してください(ただし、以前は機能し、リリースで変更されたものはありません)
開発マシンでも同じ問題に直面しました。基本的にはアプリケーションサーバーの問題が原因で発生しました(Apache Tomcat)
基本的に、サーバールートの "temp"フォルダを誤って削除しました。したがって、jasperはレポートをコンパイルして、レポート生成を続行できません。
同じエラーが発生しました-明らかにJRStyledTextParserはxml-apisからの依存関係を使用していますxml-apisを追加することで修正しました
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
私の場合、これにArialフォントを使用していましたが、以下のようなirfonts.xmlでarialフォントを構成しました
<fontFamily name = "Arial">
<通常> <![CDATA [fonts/arial.ttf]]> </通常>
<太字> <![CDATA [fonts/arialbd.ttf]]>
</ bold>
<イタリック> <![CDATA [fonts/ariali.ttf]]>
</ italic>
<boldItalic> <![CDATA [fonts/arialbi.ttf]]>
</ boldItalic>
<pdfEmbedded> <![CDATA [true]]>
</ pdfEmbedded> </ fontFamily>
しかし、それは次のようになるはずです:
<fontFamily name = "Arial">
<通常> <![CDATA [fonts/arial.ttf]]> <
/通常>
<bold> <![CDATA [fonts/arialbd.ttf]]> </ bold>
<italic> <![CDATA [fonts/ariali.ttf]]> </ italic>
<boldItalic> <!
[CDATA [fonts/arialbi.ttf]]> </ boldItalic>
<pdfEmbedded> <!
[CDATA [true]]> </ pdfEmbedded>
</ fontFamily>
そのため、上記の構成ファイルの各タグの終了タグの前のスペースでした。
私はそれらの間のスペースを削除することで修正しました。
これは役立つかもしれませんが、同じエラーが発生し、他のすべてのソリューションが機能しませんでした。
Java8にアップデートして修正しました。