2012-04-16 7 views
2

:私はそれを説明については、多くの記事を見てきましたJavaのヘッドレス例外設定した後にします。-Djava.awt.headless = trueに私が使用しています

のLinuxのDebian 6、 1.6.29 JavaとTomcatを そのjava.awtにはX11ライブラリなどが必要ですが、問題を解決していません。

は、私は私のボックスにします。-Djava.awt.headless = trueを設定し、私は今、私は取得しています、ヘッドレス環境の最初の問題を回避働い:

java.awt.HeadlessException 
java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
java.awt.Window.(Window.java:432) 
java.awt.Frame.(Frame.java:403) 
javax.swing.JFrame.(JFrame.java:202) 
org.jfree.ui.ApplicationFrame.(ApplicationFrame.java:65) 
... 

は、私が知っているこの私だけ言われたJavaを実行して、モニタが存在しないことを確認してください(実際には、環境がヘッドレスであるかどうかを確認するためにスタンドアロンのJavaプログラムを実行しています)。trueを返します。 DISPLAY env変数の設定など、Linux環境とは何か関係ありますか?

私はあなたの助けに感謝します。

ありがとうございました。

+2

なぜTomcatでJFrameを使用する必要がありますか? – dash1e

+0

はい。 BarChartGeneratorクラスが最初に見つかった場合は、ApplicationFrameクラスを拡張しました。今はもういない! X11の依存関係が修正されました。 – mzereba

答えて

0

ご返信ありがとうございます。

私はあなたにテキストを書こうとしていることを教えてくれました。まだその例外をスローしていないが、何らかの理由で空のイメージを作成しているという意味では機能しません。

だから私はここから行ってきました:以下の(extends ApplicationFrameを退治する)とあなたが私を与えた例を使用するに

public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) extends ApplicationFrame { 

     System.setProperty("java.awt.headless", "true"); 
     boolean headless = GraphicsEnvironment.isHeadless(); 
     System.out.println("Headless: " + headless); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     tk.beep(); 

     // generate dataset 
     final CategoryDataset dataset = createDataset(lVMs); 
     setChart(createChart(oServer, oServerStat, lVMs, dataset)); 

     // create PNG of the chart... 
     setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif"); 

     File fImageFile = new File(path+filename); 
     try { 
      ChartUtilities.saveChartAsPNG(fImageFile, chart, PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

:それはおよそImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename()));がこれを与える文句ログに

public BarChartGenerator(org.qcri.power.ws.client.Server oServer, ServerStatistics oServerStat, List lVMs, String path) { 

     System.setProperty("java.awt.headless", "true"); 
     boolean headless = GraphicsEnvironment.isHeadless(); 
     System.out.println("Headless: " + headless); 
     Toolkit tk = Toolkit.getDefaultToolkit(); 
     tk.beep(); 

     // generate dataset 
     final CategoryDataset dataset = createDataset(lVMs); 
     setChart(createChart(oServer, oServerStat, lVMs, dataset)); 

     // create PNG of the chart... 
     setFilename("chart_server"+oServer.getHost()+"_"+System.currentTimeMillis()+".gif"); 

     try { 
      BufferedImage bufferedImage = getChart().createBufferedImage(PowerInterface.CHART_WIDTH, PowerInterface.CHART_HEIGHT); 
      ImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename())); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

エラー(ファイルが存在する間):

javax.imageio.IIOException: Can't create output stream! 
     at javax.imageio.ImageIO.write(ImageIO.java:1560) 
     at org.qcri.power.util.BarChartGenerator.<init>(BarChartGenerator.java:106) 

ヒント?

+0

tomcatホームにtempディレクトリを追加して問題を解決しました。 – mzereba

5

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/で読めるように、ディスプレイデバイス、キーボードまたはマウスがサポートされていない場合、多くのコンポーネントが影響を受けます。 に関連するメソッドCanvas、Panel、およびImageコンポーネントは、ヘッドレス例外を投げる必要はありません。これらのコンポーネントに空のピアを与え、軽量コンポーネントとして扱うことができるからです。

したがって、JFrameはHeadlessExceptionをスローするコンポーネントです。

ヘッドレス環境でjfreechartを使用してグラフを生成する場合は、このリンクが役立ちます:http://javaevangelist.blogspot.com.es/2010/11/creating-charts-on-headless-systems.html

+0

返信ありがとう、それは便利です。今例外を投げているわけではありませんが、空の画像を作成しています(私は8時間後に何かを投稿してしまいます)。 – mzereba

1

このフォーラムthreadで説明されているように、VNCサーバー(または同様のもの)をインストールする必要があります。

補足:グラフイメージをファイルとして保存する代わりに、writeChartAsPNG()メソッドの1つ(here)を使用してサーバーの出力ストリームに書き込みます。

+0

私は、ファイルが物理的に存在するので奇妙だが、ファイルを見つけられないというメーターだと思う!パスは正しいです... – mzereba

+0

今は別の問題になっています。私は一時ファイルを書き込むためのサーバー構成の問題があると思いますか? – mzereba

+0

それは確かに可能かもしれません。上記より。 – trashgod

2
-Djava.awt.headless=false 

それが御馳走を作品の上に追加します:)

+0

私の問題を解決しました:) –

1

は、任意のApplicationFrameは、この問題を解決しますから延びて離陸します。 ほとんどのTomcatデプロイメント環境では、通常、X11 Windowsパッケージはありません。 古いAWTオブジェクトを使用するApplicationFrame(JFram)は必要ありません。

私の例

BloodChart(String title) extends ApplicationFrame 

変化へ - >

BloodChart(String title) 

それは私のための仕事、幸運です!

関連する問題