QA@IT
«質問へ戻る

質問を投稿

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

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

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

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

このページの[java.awt.HeadLessException:]を検索にかけて、調べたのですが、いまいち解消方法を理解できていません。
参照URL:enter link description here

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サーブレットでJOptionPaneを使っているため、この周辺でエラーが出力されているようです。

package servlet;

import java.io.IOException;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import model.HistoryDeleteLogic;

@WebServlet("/HistoryDelete")
public class HistoryDelete extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();                                     // セッションを取得するための準備
        int logId;                                                                          // ログインIDを保存しておくための変数
        StringBuffer urlBuffer = request.getRequestURL();                                   // 変数 urlBuffer に現在のページのURLを格納する(ただし、?以降のパラメータ情報は取得できない)
        String url = urlBuffer.append("?").append(request.getQueryString()).toString();     // 先ほど取得したURL文字列の後ろに、現在のパラメータ情報をドッキングする
        int indexOfParam = url.indexOf("=");                                                // パラメータ付きURLかどうかを調べる(=マークがあるかどうか)
        if(session.getAttribute("loginUser") != null && indexOfParam != -1) {
            logId = Integer.parseInt(url.substring(indexOfParam + 1));                      // =マークから先を切り取り、取得した文字列を変数 logId に格納する(int型へキャスト)
            HistoryDeleteLogic hdl=new HistoryDeleteLogic();
            List<Integer> list = hdl.act(logId);
            int result;
            JFrame frame = new JFrame();
        Properties prop = System.getProperties ();
            prop.put ("java.awt.headless", "false");
            Object[] options = { "はい", "いいえ" };
            frame.setAlwaysOnTop(true);
            result = JOptionPane.showOptionDialog(frame, "削除してもよろしいですか?", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
            switch (result) {
                case JOptionPane.OK_OPTION:
                    hdl.execute(logId);
                    JFrame frame2 = new JFrame();
                    Properties prop2 = System.getProperties ();
                    prop.put ("java.awt.headless", "false");
                    Object[] options2 = { "はい" };
                    frame2.setAlwaysOnTop(true);
                    JOptionPane.showOptionDialog(frame2, "削除しました", "Information", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options2, options2[0]);
                case JOptionPane.NO_OPTION:
                case JOptionPane.CANCEL_OPTION:
                default:
                    session.setAttribute("year", list.get(0));
                    session.setAttribute("month", list.get(1));
                    session.setAttribute("weightHistoryLength", null);
                    response.sendRedirect("/bodyMassIndex/History");
                    break;
            }
        }
        else {
            response.sendRedirect("/bodyMassIndex/");
        }

    }

}

JFrame frame = new JFrame();

上記のコードで500エラーが表示されてしまっています。

解消方法をご教授願います。

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

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

任意の動作をしたときに以下のようなエラーページが出力されます。
![_____.PNG](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/277/_____.PNG)

このページの[java.awt.HeadLessException:]を検索にかけて、調べたのですが、いまいち解消方法を理解できていません。
参照URL:[enter link description here](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サーブレットでJOptionPaneを使っているため、この周辺でエラーが出力されているようです。
```Java
package servlet;

import java.io.IOException;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import model.HistoryDeleteLogic;

@WebServlet("/HistoryDelete")
public class HistoryDelete extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();										// セッションを取得するための準備
		int logId;																			// ログインIDを保存しておくための変数
		StringBuffer urlBuffer = request.getRequestURL();									// 変数 urlBuffer に現在のページのURLを格納する(ただし、?以降のパラメータ情報は取得できない)
		String url = urlBuffer.append("?").append(request.getQueryString()).toString();		// 先ほど取得したURL文字列の後ろに、現在のパラメータ情報をドッキングする
		int indexOfParam = url.indexOf("=");												// パラメータ付きURLかどうかを調べる(=マークがあるかどうか)
		if(session.getAttribute("loginUser") != null && indexOfParam != -1) {
			logId = Integer.parseInt(url.substring(indexOfParam + 1));						// =マークから先を切り取り、取得した文字列を変数 logId に格納する(int型へキャスト)
			HistoryDeleteLogic hdl=new HistoryDeleteLogic();
			List<Integer> list = hdl.act(logId);
			int result;
			JFrame frame = new JFrame();
		Properties prop = System.getProperties ();
			prop.put ("java.awt.headless", "false");
			Object[] options = { "はい", "いいえ" };
			frame.setAlwaysOnTop(true);
			result = JOptionPane.showOptionDialog(frame, "削除してもよろしいですか?", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
			switch (result) {
				case JOptionPane.OK_OPTION:
					hdl.execute(logId);
					JFrame frame2 = new JFrame();
					Properties prop2 = System.getProperties ();
					prop.put ("java.awt.headless", "false");
					Object[] options2 = { "はい" };
					frame2.setAlwaysOnTop(true);
					JOptionPane.showOptionDialog(frame2, "削除しました", "Information", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options2, options2[0]);
				case JOptionPane.NO_OPTION:
				case JOptionPane.CANCEL_OPTION:
				default:
					session.setAttribute("year", list.get(0));
					session.setAttribute("month", list.get(1));
					session.setAttribute("weightHistoryLength", null);
					response.sendRedirect("/bodyMassIndex/History");
					break;
			}
		}
		else {
			response.sendRedirect("/bodyMassIndex/");
		}

	}

}

```

JFrame frame = new JFrame();

上記のコードで500エラーが表示されてしまっています。

解消方法をご教授願います。