- PR -

ヘッドレスモード

1
投稿者投稿内容
まみ
会議室デビュー日: 2003/06/27
投稿数: 12
投稿日時: 2004-03-19 19:16
ヘッドレスモードについて調査しているですが・・・
フレームを生成するときにエラーが出て困っております。
ヘビーGUIは落ちることはわかったのですが・・・
その代替はどのようにしたら良いでしょうか?
ご教授よろしくお願い致します。


動作環境
Vine Linux 2.1.5
j2sdk1.4.1_01
tomcat-4.0.6

export JAVA_HOME=/usr/local/j2sdk1.4.1_01
export PATH=$PATH:/usr/local/j2sdk1.4.1_01/bin
export CLASSPATH=$CLASSPATH:/usr/local/j2sdk1.4.1_01/lib/tools.jar:.
export CLASSPATH=$CLASSPATH:/usr/local/tomcat/common/lib/servlet.jar
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_OPTS="-Djava.awt.headless=true"
export PATH=$PATH:/usr/local/tomcat/bin

ソース
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExportServlet extends HttpServlet implements SingleThreadModel {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doPost(request, response);
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
System.out.println("start");
Frame frame = new Frame();
System.out.println("end");
} catch(Exception e) {
e.printStackTrace();
}
}
}

エラー内容
java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:121)
at java.awt.Window.<init>(Window.java:266)
at java.awt.Frame.<init>(Frame.java:398)
at java.awt.Frame.<init>(Frame.java:363)
at ExportServlet.doPost(ExportServlet.java:18)
at ExportServlet.doGet(ExportServlet.java:11)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:465)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)

_________________
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-19 19:23
軽量コンポーネント、javax.swing.J*** を使えばよいかと思います。たぶん。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-03-19 19:26
こんにちは。
逆質問ですが、サーブレットの中でawtのFrameを生成して何をなさろうとしているので
しょうか?


まみ
会議室デビュー日: 2003/06/27
投稿数: 12
投稿日時: 2004-03-22 09:21
お世話になっております。
涼子です。
お返事が遅くなって申し訳ございません。

インギ様
JFrameで生成してみたところ・・・
HeadlessException 発生してしまいました。。。
書き方間違ってるですかね?(泣
すいません・・・ Java初心者なもので・・・

import javax.swing.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExportServlet extends HttpServlet implements SingleThreadModel {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doPost(request, response);
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
System.out.println("start");
JFrame frame = new JFrame();
System.out.println("end");
} catch(Exception e) {
e.printStackTrace();
}
}
}

エラー内容
start
java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:121)
at java.awt.Window.<init>(Window.java:266)
at java.awt.Frame.<init>(Frame.java:398)
at java.awt.Frame.<init>(Frame.java:363)
at javax.swing.JFrame.<init>(JFrame.java:154)
at ExportServlet.doPost(ExportServlet.java:18)
at ExportServlet.doGet(ExportServlet.java:11)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:465)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)



_________________
まみ
会議室デビュー日: 2003/06/27
投稿数: 12
投稿日時: 2004-03-22 09:37
maru 様
おっしゃる通りですね。
何をしたいかよって・・・ 変わってきますよね。
今、EspressChart4.2を使って画像処理の
サーブレットを作成しております。
Windows環境で動作確認したのですが、
Unix環境で動作しないので調査した結果、
上記の経緯がわかりました。
EspressChart4.2の中にChartAPIというAPIがありまして
そのAPIを使って画像処理します。
ヘッドレス、pjaと調査してきましたが・・・
X-Server立上げないとダメなんですかね?

API------------------------------------------
QbChart
public QbChart(java.awt.Frame frame,
int dimension,
int chartType,
IResultSet data,
IColumnMap cmap)Deprecated. Please use the constructor having the applet parameter. Use "(Applet) null" as the first argument.

Create a new chart, given the chart type and dimension. Input data is passed directly as an argument.
Use this constructor if the chart is used in an application, If the chart server is used, the server locator file (server.cfg) is assumed to be in the current directory of the application.
Parameters:
frame - A Frame
dimension - use QbChart.VIEW2D or QbChart.VIEW3D to specify 2D or 3D chart
data - source data to plot chart, see IResultSet for details.
cmap - column information used to specify the column mappings used to plot data, see interface IColumnMap for details

サーブレット-------------------------------
import java.io.*;
import java.util.*;
import quadbase.ChartAPI.*;
import quadbase.util.*;
import javax.swing.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class ExportServlet extends HttpServlet implements SingleThreadModel {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doPost(request, response);
}


public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// first, set the "content type" header of the response
res.setContentType("text/html");

// Get the response's PrintWriter to return text to the client.
PrintWriter toClient = res.getWriter();

String GIFName = "temp";
try {
QbChart.setChartServerUsed(false);

ColInfo colInfo=new ColInfo();
colInfo.category=0;
colInfo.value=3;

QbChart chart =
new QbChart(new JFrame(), QbChart.VIEW2D, QbChart.COL, "/Gazou/sample.dat", colInfo);
// Adding Hyperlink. For more information, please see EspressChart/help/apidocs/quadbase/util/IHyperLinkSet.html
// IHyperLinkSet hyperLinks=chart.gethHyperLinks();
// Using constructor Hyperlink (series, category, sumby, link, target)
// hyperLinks.add(new HyperLink("", "", "", "http://www.quadbase.com", "_self"));

String errorMessage = chart.getErrorMessage();
if (errorMessage != null) {
toClient.println("Error" + errorMessage);
System.out.println("Error" + errorMessage);
}

// Export the chart
// Chart.export(format, filename, width, height)
chart.export(QbChart.GIF, "/Gazou/" + GIFName, 500, 400);

// Respond to client with a thank you
toClient.println("<html>");
toClient.println("<title>Thank you!</title>");
toClient.println("<H1>Example of Chart Image</H1>");

// Please change the URL of the GIF file
String path = "file:///Gazou/" + GIFName + ".gif";
toClient.println("<H2>Export chart to " + path + "</H2>");
toClient.println("<IMG SRC=\"" + path + "\">");
toClient.println("</html>");

} catch(Exception e) {
e.printStackTrace();
toClient.println("Cannot export file");
toClient.println(e.toString());
}

// Close the writer; the response is done.
toClient.close();
}
}


_________________
1

スキルアップ/キャリアアップ(JOB@IT)