質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

10275閲覧

エラー解決(java.awt.HeadlessException:)

cayribaka

総合スコア19

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2017/08/04 08:01

編集2017/08/07 08:59

現在、Centos7でWebサーバーを構築してTomcatでアプリケーションを動かしています。

アプリケーションはWindows7/Eclipseで作成したものを.warファイルにし、サーバー上のTomcatに配備しています。

任意の動作をしたときに以下のようなエラーページが出力されます。
イメージ説明

このページの[java.awt.HeadLessException:]を検索にかけて、調べたのですが、いまいち解消方法を理解できていません。
参照URL:http://kumagonjp2.blog.fc2.com/blog-entry-199.html

Tomcatの起動スクリプト$ vim /usr/local/tomcat/bin/catalina.sh に追記するとのことですが、この文章以下の
$ export CATALINA_OPTS="-Djava.awt.headless=true"
↑この文章が理解できません
catalina.sh ファイルの中の一番下の行に
$ export CATALINA_OPTS="-Djava.awt.headless=true"
この一行を追記するということでしょうか?

以下エラーが発生したJavaサーブレットのコードになります。

Java

1package servlet; 2 3import java.io.IOException; 4import java.util.List; 5import java.util.Properties; 6 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12import javax.servlet.http.HttpSession; 13import javax.swing.JFrame; 14import javax.swing.JOptionPane; 15 16import model.HistoryDeleteLogic; 17 18@WebServlet("/HistoryDelete") 19public class HistoryDelete extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 HttpSession session = request.getSession(); // セッションを取得するための準備 24 int logId; // ログインIDを保存しておくための変数 25 StringBuffer urlBuffer = request.getRequestURL(); // 変数 urlBuffer に現在のページのURLを格納する(ただし、?以降のパラメータ情報は取得できない) 26 String url = urlBuffer.append("?").append(request.getQueryString()).toString(); // 先ほど取得したURL文字列の後ろに、現在のパラメータ情報をドッキングする 27 int indexOfParam = url.indexOf("="); // パラメータ付きURLかどうかを調べる(=マークがあるかどうか) 28 if(session.getAttribute("loginUser") != null && indexOfParam != -1) { 29 logId = Integer.parseInt(url.substring(indexOfParam + 1)); // =マークから先を切り取り、取得した文字列を変数 logId に格納する(int型へキャスト) 30 HistoryDeleteLogic hdl=new HistoryDeleteLogic(); 31 List<Integer> list = hdl.act(logId); 32 int result; 33 JFrame frame = new JFrame(); 34 Properties prop = System.getProperties (); 35 prop.put ("java.awt.headless", "false"); 36 Object[] options = { "はい", "いいえ" }; 37 frame.setAlwaysOnTop(true); 38 result = JOptionPane.showOptionDialog(frame, "削除してもよろしいですか?", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); 39 switch (result) { 40 case JOptionPane.OK_OPTION: 41 hdl.execute(logId); 42 JFrame frame2 = new JFrame(); 43 Properties prop2 = System.getProperties (); 44 prop.put ("java.awt.headless", "false"); 45 Object[] options2 = { "はい" }; 46 frame2.setAlwaysOnTop(true); 47 JOptionPane.showOptionDialog(frame2, "削除しました", "Information", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options2, options2[0]); 48 case JOptionPane.NO_OPTION: 49 case JOptionPane.CANCEL_OPTION: 50 default: 51 session.setAttribute("year", list.get(0)); 52 session.setAttribute("month", list.get(1)); 53 session.setAttribute("weightHistoryLength", null); 54 response.sendRedirect("/bodyMassIndex/History"); 55 break; 56 } 57 } 58 else { 59 response.sendRedirect("/bodyMassIndex/"); 60 } 61 62 } 63 64} 65

上記コードのJFrame frame = new JFrame();の部分で、エラー画面が出力されているようです。
サーバのTomcatではJOptionPaneは使用できないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/07 03:31

CENTOS側にアクセスのできないGUIを作成する意図はなんでしょう?
cayribaka

2017/08/07 05:23

削除ボタンが実装されていまして、削除ボタンを押すと、「データを削除してよろしいですか」YES、NOを選択する選択ダイアログを表示させたいため、JOptionPaneを使っているからです。
guest

回答2

0

検証はしていませんが、その通りで良いかと。

投稿2017/08/05 00:37

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cayribaka

2017/08/07 00:39

catalina.sh ファイルの中の一番下の行に $ export CATALINA_OPTS="-Djava.awt.headless=true" この一行を追記するということでしょうか? ↑設定ファイルに上記の内容を追記したのですが、再度同じエラー画面が表示されます。
退会済みユーザー

退会済みユーザー

2017/08/07 03:32

centos7にtomcatがアクセスできるデスクトップが無いように見えるが
cayribaka

2017/08/07 05:25

No X11 DISPLAY variable was set の部分でしょうか? 設定の仕方などあるのでしょうか?すみません。
退会済みユーザー

退会済みユーザー

2017/08/07 23:40

ローカル開発環境以外では思っている動作はしませんよ。 genom-desktop 等のGUIツールをサーバーにインストールすればいまの対応でエラーは消えます
cayribaka

2017/08/08 00:47

JFrameはローカル以外では使えなんですね.... GNOME Desktopをインストールしてみます
cayribaka

2017/08/08 01:40

GNOME Desktopをインストールして動かしたのですが、エラーが消えません。 同じエラーが出てきます。
guest

0

自己解決

回答してくださった皆さんありがとうございます。
そもそもローカル環境以外でJFrameは使えないとのことですので、JavaScriptで書き直します。
ありがとうございました。

投稿2017/08/08 04:16

cayribaka

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問