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

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

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

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Q&A

解決済

1回答

846閲覧

Threadを使ってLabelを更新したい。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

0グッド

0クリップ

投稿2019/01/07 07:37

編集2019/01/07 12:28

threadを使った、カウントダウンタイマーを作成しようとしています。
コマンド画面では、カウントダウンが表示できますが、labelの更新がうまくできません。

lbTime.setText(min+":"+sec);の部分で以下のエラーが出ています。
アドバイス頂ければ幸いです。
よろしくお願い致します。

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at finalProject$MyRunnable.lambda$run$0(finalProject.java:88) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)

Threadのコードになります。

Java

1public class MyRunnable implements Runnable 2 { 3 @Override 4 public void run() 5 { 6 while(true) 7 { 8 s = timeleft - counter; 9 min = s / 60; 10 sec = s % 60; 11 System.out.println(min+":"+sec); 12 Platform.runLater( 13 () -> lbTime.setText(min+":"+sec)); 14 try{ 15 Thread.sleep(1000); 16 counter++; 17 }catch(InterruptedException e) 18 { 19 System.out.println(e); 20 } 21 } 22 } 23 }

全体のコード

Java

1import javafx.application.*; 2import javafx.scene.*; 3import javafx.scene.layout.*; 4import javafx.scene.control.*; 5import javafx.scene.paint.*; 6import javafx.scene.image.*; 7import javafx.scene.effect.*; 8import javafx.scene.text.*; 9import javafx.scene.input.*; 10import javafx.scene.canvas.*; 11import javafx.scene.shape.*; 12import javafx.stage.*; 13import javafx.event.*; 14import javafx.geometry.*; 15import javafx.collections.*; 16import java.util.*; 17 18public class finalProject extends Application 19{ 20 private int counter; 21 private int timeleft; 22 private Label lbTime; 23 private int s; 24 private int min; 25 private int sec; 26 private MyRunnable runnable; 27 private Thread thread; 28 29 public void start(Stage stage) throws Exception 30 { 31 timeleft = 65; 32 33 ImageView icon1 = new ImageView("setting.png"); 34 35 Label[] lbs = new Label[2]; 36 lbs[0] = new Label(); 37 lbs[1] = new Label("進捗状況"); 38 lbs[0].setGraphic(icon1); 39 40 Label lbTasks = new Label("Tasks"); 41 Label lbTime = new Label("00:00"); 42 43 Button btPlay = new Button("PLAY"); 44 Button btReset = new Button("RESET"); 45 btPlay.setGraphic(new ImageView("play.png")); 46 btPlay.setId("play"); 47 btReset.setGraphic(new ImageView("reset.png")); 48 btReset.setId("reset"); 49 50 ButtonEventHandler bh = new ButtonEventHandler(); 51 btPlay.addEventHandler(ActionEvent.ANY, bh); 52 btReset.addEventHandler(ActionEvent.ANY, bh); 53 54 runnable = new MyRunnable(); 55 thread = new Thread(runnable); 56 57 GridPane gp = new GridPane(); 58 gp.add(btPlay, 0, 0); 59 gp.add(btReset, 1, 0); 60 gp.setBackground(null); 61 62 VBox vb = new VBox(); 63 ObservableList<Node> lst = vb.getChildren(); 64 lst.addAll(lbs); 65 lst.add(lbTime); 66 lst.addAll(gp); 67 lst.add(lbTasks); 68 69 Scene scene = new Scene(vb, 500, 500); 70 scene.setFill(Color.LIGHTGRAY); 71 72 stage.setScene(scene); 73 stage.setTitle("Pomodoro"); 74 stage.setResizable(false); 75 76 stage.show(); 77 } 78 79 public class MyRunnable implements Runnable 80 { 81 @Override 82 public void run() 83 { 84 while(true) 85 { 86 s = timeleft - counter; 87 min = s / 60; 88 sec = s % 60; 89 System.out.println(min+":"+sec); 90 Platform.runLater( 91 () -> lbTime.setText(min+":"+sec)); 92 try{ 93 Thread.sleep(1000); 94 counter++; 95 }catch(InterruptedException e) 96 { 97 System.out.println(e); 98 } 99 } 100 } 101 } 102 103 private class ButtonEventHandler implements EventHandler<ActionEvent> 104 { 105 public void handle(ActionEvent e) 106 { 107 Button bt = (Button)e.getTarget(); 108 String id = bt.getId(); 109 if(id.equals("play")){ 110 thread.start(); 111 } 112 if(id.equals("reset")){ 113 114 } 115 } 116 } 117 118 public static void main(String[] args) 119 { 120 launch(args); 121 } 122} 123

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードで解決できました。

public class MyRunnable implements Runnable
{
public void run()
{
while(true)
{
s = timeleft - counter;
min = s / 60;
sec = s % 60;
System.out.println(String.format("%01d:+sec"));
Platform.runLater(
() -> lbTime.setText(min+":"+sec));
try{
Thread.sleep(1000);
counter++;
}catch(InterruptedException e)
{
System.out.println(e);
}
}
}
}

投稿2019/01/07 13:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問