2

使ってます:

Linux Debian 6、Java 1.6.29、Tomcat 6

X11ライブラリなどが必要であることを説明する多くの投稿を見てきましたjava.awtが、問題を解決していません。

ボックスに-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環境と関係があるのでしょうか。

私はあなたの助けをいただければ幸いです、

ありがとう。

4

5 に答える 5

5

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

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

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

于 2012-04-16T08:14:30.793 に答える
2
-Djava.awt.headless=false

上に追加するとおやつになります:)

于 2012-07-10T14:20:43.157 に答える
1

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

補遺:チャート画像をファイルとして保存する代わりに、ここでwriteChartAsPNG()提案されているように、いずれかの方法を使用してサーバーの出力ストリームに書き込みます。

于 2012-04-16T18:24:05.670 に答える
1

ApplicationFrameから拡張機能を 削除すると、この問題が解決します。ほとんどのTomcatデプロイメント環境では、通常、X11Windowsパッケージはありません。古いAWTオブジェクトを使用するApplicationFrame(JFram)は必要ありません。

私の例

BloodChart(String title)  extends ApplicationFrame 

->に変わります

BloodChart(String title)

それは私のために働いています、頑張ってください!

于 2012-12-12T13:24:16.370 に答える
0

お返事をありがとうございます。

あなたが私にそれをテキストで送ろうとしていると言ってから。それでも、次の意味では機能しません。は、その例外をもうスローしていませんが、何らかの理由で空白の画像を作成しています。

だから私はこれから行きました:

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();
        }
   }

次のように(を取り除くextends ApplicationFrame)、あなたが私に与えた例を使用してください:

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();
        }
   }

ログでは、このエラーが発生することについて不平を言ってImageIO.write(bufferedImage, "gif", new FileOutputStream(path+getFilename()));います(ファイルがそこにある間!):

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)

どんな手掛かり?

于 2012-04-17T06:33:49.257 に答える