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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

3230閲覧

java.lang.NullPointerException: text例外が解消されずに息詰まっています

aaa11

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

例外

例外(exception)とは、プログラムの処理実行中に発生する、通常の処理の続行を妨げる特殊な事象のことを呼びます。この「例外」が発生した場合に、現在の処理を中断し、変わりに別の処理を実行させる事を「例外処理」と呼びます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/02/04 03:21

編集2021/02/04 03:24

JAVA,Eclipse,MySQLを使用してコードを書いています。
出勤時間、休憩時間、休憩終了時間、退勤時間がある場合は労働時間の計算がうまくいきエラーが出ません。
問題は休憩開始時間がNULLの時と休憩終了時間がNULLの時に例外が発生していて例外が解消されず息詰まっている状態です。コードが長く読みにくいとはございますがご教授いただけたら助かります。

Eclipse

1例外 2java.lang.NullPointerException: text 3 java.base/java.util.Objects.requireNonNull(Objects.java:233) 4 java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1950) 5 java.base/java.time.LocalTime.parse(LocalTime.java:464) 6 java.base/java.time.LocalTime.parse(LocalTime.java:449) 7 servlet.AbsenceServlet.doPost(AbsenceServlet.java:154) 8 javax.servlet.http.HttpServlet.service(HttpServlet.java:652) 9 javax.servlet.http.HttpServlet.service(HttpServlet.java:733) 10 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

dto

1public class WorkDto { 2 3 4 private String userid;//ユーザーID 5 private String workday;//日付 6 private String attendacetimes;//出勤時間 7 private String startbreaktimes;//休憩開始時間 8 private String endbreaktimes;//休憩終了時間 9 private String absencetimes;//退勤時間 10 private String sumworktimes;//合計労働時間 11 12 public String getUserid() { 13 return userid; 14 } 15 public void setUserid(String userid) { 16 this.userid = userid; 17 } 18 ...省略 19}

dao

1public class WorkDao { 2 private DBConnection db; 3 public WorkDao(DBConnection db) { 4 this.db = db; 5 } 6 //JDBCの接続に使用するオブジェクトを宣言 7 Connection con = null ; // Connection(DB接続情報)格納用変数 8 PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数 9 ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数 10 11//全件取得処理 12 13 public WorkDto SelectAllWorktimetable(String userid,String workday)throws Exception { 14 WorkDto workdto = new WorkDto(); 15 try { 16 String sql = "SELECT * FROM worktimetable WHERE userid = ? AND workday = ?"; 17 con = db.getConnection(); 18 ps = con.prepareStatement(sql); 19 ps.setString(1, userid); 20 ps.setString(2, workday); 21 rs = ps.executeQuery(); 22 if (rs.next()) { 23 workdto.setUserid(rs.getString("userid")); 24 workdto.setWorkday(rs.getString("workday")); 25 workdto.setAttendacetimes(rs.getString("attendacetimes")); 26 workdto.setStartbreaktimes(rs.getString("startbreaktimes")); 27 workdto.setEndbreaktimes(rs.getString("endbreaktimes")); 28 workdto.setAbsencetimes(rs.getString("absencetimes")); 29 workdto.setSumworktimes(rs.getString("sumworktimes")); 30 } 31 } catch (SQLException e) { 32 e.printStackTrace(); 33 } finally { 34 //------------------------------------------- 35 //接続の解除 36 //------------------------------------------- 37 ...省略} 38 return workdto; 39 } 40

servlet

1protected void doPost(..... { 2 //セッションからユーザーデータを取得 3 HttpSession session = request.getSession(); 4 UserDto userLoginSession = (UserDto)session.getAttribute("userlogin");//ログインセッション 5 String userid = (String)session.getAttribute("userid"); 6 WorkDto workdto = new WorkDto(); 7 WorkLogic worklogic = new WorkLogic(); 8 9 LocalDate localDate = LocalDate.now();//日付 10 LocalTime localTime = LocalTime.now();//現在時刻 11 12 DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("HH:mm"); 13 DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 14 String workday = localDate.format(dateFormat);//今日の日付 15 String attendacetimes;//出勤時間 16 String absencetimes = localTime.format(timeFormat);//退勤時間 17 String startbreaktimes;//休憩開始時間 18 String endbreaktimes;//休憩終了時間 19 String sumworktimes;//合計勤務時間 20 21 LocalTime localAttendacetimes;//ローカル出勤時間 22 LocalTime localStartbreaktimes;//ローカル休憩時間 23 LocalTime localEndbreaktimes;//ローカル休憩終了時間 24 LocalTime localAbsencetimes;//ローカル退勤時間 25 LocalTime localBreaktime;//ローカル合計休憩時間 26 LocalTime localWorktime;//ローカル勤務時間 27 LocalTime localSumworktimes;//ローカル合計勤務時間 28 29 Duration worktimeduration; 30 Duration breaktimetimesduration; 31 Duration sumworktimesduration; 32 33 boolean judge = false; //true:成功/false:失敗) 34 35 //ログイン状態によって表示画面を振り分ける 36 if (userLoginSession != null) { 37 //absencetimesセッションがある場合(true:成功/false:失敗) 38 try { 39 workdto = worklogic.SelectAllWorktimetableCheck(userid,workday);//全件取得 40 } catch (Exception e) { 41 e.printStackTrace(); 42 } 43 workdto.getUserid();//ユーザーID 44 workdto.getWorkday();//日付 45 workdto.getAttendacetimes();//出勤時間 46 workdto.getStartbreaktimes();//休憩開始時間 47 workdto.getEndbreaktimes();//休憩終了時間 48 workdto.getAbsencetimes();//退勤時間 49 50 //ユーザーID&日付がある場合 51 if(workdto.getUserid() != null & workdto.getWorkday() != null) { 52 //退勤時間がない場合に退勤時間を登録 53 if(workdto.getAbsencetimes() == null) { 54 workdto.setUserid(userid);//ユーザーID 55 workdto.setWorkday(workday);//日付 56 workdto.setAbsencetimes(absencetimes);//退勤時間 57 //DBに登録 58 try { 59 judge = worklogic.registAbsencetimeCheck(workdto); 60 } catch (Exception e) { 61 // TODO 自動生成された catch ブロック 62 e.printStackTrace(); 63 } 64 }else { 65 judge = false; 66 } 67 }else { 68 judge = false; 69 } 70 71 if (judge) { 72 try { 73 workdto = worklogic.SelectAllWorktimetableCheck(userid,workday);//全件取得 74 } catch (Exception e) { 75 // TODO 自動生成された catch ブロック 76 e.printStackTrace(); 77 } 78 userid = workdto.getUserid();//ユーザーID 79 workday = workdto.getWorkday();//日付 80 attendacetimes = workdto.getAttendacetimes();//出勤時間 81 startbreaktimes = workdto.getStartbreaktimes();//休憩開始時間 82 endbreaktimes = workdto.getEndbreaktimes();//休憩終了時間 83 absencetimes = workdto.getAbsencetimes();//退勤時間 84 85 if(userid != null & workday != null) { 86 if(absencetimes != null) {//退勤時間がある場合 87 localAttendacetimes = LocalTime.parse(attendacetimes); 88 localStartbreaktimes = LocalTime.parse(startbreaktimes); 89 localEndbreaktimes = LocalTime.parse(endbreaktimes); 90 localAbsencetimes = LocalTime.parse(absencetimes); 91 92/////////////////////////////////////////////////////////////////////////////////////// 93                //問題のエラーが出る処理箇所 94/////////////////////////////////////////////////////////////////////////////////////// 95                  96 if(startbreaktimes == null){//休憩開始時間がnullの場合 97 //休憩時間がNULLの場合 98 //勤務時間 99 worktimeduration = Duration.between(localAttendacetimes,localAbsencetimes); 100 localSumworktimes = LocalTime.MIDNIGHT.plus(worktimeduration); 101 //労働時間文字列に変換 102 sumworktimes = localSumworktimes.format(timeFormat); 103 //DB登録 104 try { 105 judge = worklogic.registSumworktimesCheck(userid,workday,sumworktimes); 106 } catch (Exception e) { 107 // TODO 自動生成された catch ブロック 108 e.printStackTrace(); 109 } 110 }else if(endbreaktimes == null) {//休憩終了時間がnullの場合 111 //勤務時間 112 worktimeduration = Duration.between(localAttendacetimes,localAbsencetimes); 113 localWorktime = LocalTime.MIDNIGHT.plus(worktimeduration); 114 localBreaktime = LocalTime.of(1,0);//ローカルタイムに変換 115 //労働時間の計算 116 sumworktimesduration = Duration.between(localBreaktime,localWorktime); 117 localSumworktimes = LocalTime.MIDNIGHT.plus(sumworktimesduration); 118 //労働時間文字列に変換 119 sumworktimes = localSumworktimes.format(timeFormat); 120// DB登録 121 try { 122 judge = worklogic.registSumworktimesCheck(userid,workday,sumworktimes); 123 } catch (Exception e) { 124 // TODO 自動生成された catch ブロック 125 e.printStackTrace(); 126 } 127 }else if(attendacetimes != null & startbreaktimes != null & endbreaktimes != null & absencetimes !=null) { 128 //勤務時間 129 worktimeduration = Duration.between(localAttendacetimes,localAbsencetimes); 130 localWorktime = LocalTime.MIDNIGHT.plus(worktimeduration); 131 //休憩時間の計算 132 breaktimetimesduration = Duration.between(localStartbreaktimes,localEndbreaktimes); 133 localBreaktime = LocalTime.MIDNIGHT.plus(breaktimetimesduration); 134 //労働時間の計算 135 sumworktimesduration = Duration.between(localBreaktime,localWorktime); 136 localSumworktimes = LocalTime.MIDNIGHT.plus(sumworktimesduration); 137 //労働時間文字列に変換 138 sumworktimes = localSumworktimes.format(timeFormat); 139// DB登録 140 try { 141 judge = worklogic.registSumworktimesCheck(userid,workday,sumworktimes); 142 } catch (Exception e) { 143 // TODO 自動生成された catch ブロック 144 e.printStackTrace(); 145 } 146 }else { 147 judge = false; 148 } 149/////////////////////////////////////////////////////////////////////////////////////// 150                    //処理終 151/////////////////////////////////////////////////////////////////////////////////////// 152 153}else { 154 judge = false; 155 } 156 }else { 157 judge = false; 158 } 159 }else { 160 judge = false; 161 } 162 163 //成功/失敗に応じて表示させる画面を振り分ける 164 if (judge) { 165 //成功 166 request.getRequestDispatcher("/WEB-INF/jsp/absencetimes_success.jsp").forward(request, response); 167 } else { 168 //失敗した場合、エラー画面(error.jsp)を表示する 169 request.setAttribute("absencetimesError", "既に退勤ボタンが押されています"); 170 request.getRequestDispatcher("/WEB-INF/jsp/user_main.jsp").forward(request, response); 171 } 172 }else { 173 //失敗:ログインNGとしてログイン画面へ転送 174 request.getRequestDispatcher("/WEB-INF/jsp/user_login.jsp").forward(request, response); 175 } 176} 177}

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

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

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

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

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

guest

回答2

0

まずスタックトレースの読み方を覚えましょう。

1. 一行目を頑張って読む

今回だとここですね。null(ぬる)とは「何もない」「空っぽ」そんなニュアンスがあります。
検索キーワード: null とは

java.lang.NullPointerException: text

今回だと textがない のような意味になると予想できます。
(まあ、変数名のtextなのか、何らかの型なのかは知りませんがw)

2. スタックトレースを順番に見る

Javaにおけるスタックトレースの2行目以降は、経過をリスト化したもの になります。
プログラムの実行順にクラス名、関数名、ソース行番号なんかが分かります。

それを踏まえて順に読んでいくと…

java.lang.NullPointerException: text java.base/java.util.Objects.requireNonNull(Objects.java:233) java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1950) java.base/java.time.LocalTime.parse(LocalTime.java:464) java.base/java.time.LocalTime.parse(LocalTime.java:449) servlet.AbsenceServlet.doPost(AbsenceServlet.java:154)

2~5行目は標準ライブラリの処理なので手が出ないと思いますが、6行目のコレ!
servlet.AbsenceServlet.doPost(AbsenceServlet.java:154)
この部分はご自身で書いたソースなので心当たりがあると思います。

  • doPost関数がおかしい
  • AbsenceServlet.javaの154行目がおかしい

という事で、この行そのものが問題が起きている箇所になります。
あとは、この行に行きつく変数や処理などを見直せばいいわけですね。

今回に限ってはWhiteTempestさんの回答で何とかなるかもしれませんが、また同じようなことが起きた時にどこかに助けを求める姿が容易に想像つきます。

どこか分からないのかが分からないという質問程、こちらもエスパーじゃないので回答しにくいものはありません。
しかし初心者は誰もが通る道だとは思うので、腐らずに頑張っていただければと思います。

投稿2021/02/04 04:44

編集2021/02/04 04:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aaa11

2021/02/04 06:20

回答ありがとうございます。 なんとなくエラー箇所はわかっていたのですが スタックトレースの読み方がわからなかったので勉強になりました。 修正してみます。
guest

0

ベストアンサー

nullチェックする前に、parseで使ってますよ。
parseにnull渡してエラーになってます。

localAttendacetimes = LocalTime.parse(attendacetimes); localStartbreaktimes = LocalTime.parse(startbreaktimes); localEndbreaktimes = LocalTime.parse(endbreaktimes); localAbsencetimes = LocalTime.parse(absencetimes);

parseする前にnullチェックしましょう。

投稿2021/02/04 03:48

編集2021/02/04 03:50
WhiteTempest

総合スコア404

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

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

aaa11

2021/02/04 06:21

回答ありがとうございます。 修正して動かしてみます。
aaa11

2021/02/04 06:30

nullチェックした後に必要な変数だけparseで変換したところうまく処理ができました。
WhiteTempest

2021/02/04 09:21

解決されたようで良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問