【发布时间】:2014-07-29 14:05:14
【问题描述】:
谁能帮帮我:
我有一些 TextFields 我想用作计时器(或时钟),所以我将文本设置在我在控制器类中调用的线程中。
package application;
import java.net.URL;
import java.util.ResourceBundle;
import org.joda.time.DateTime;
import javafx.beans.property.LongProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleLongProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import jdk.nashorn.internal.runtime.FindProperty;
public class MainWindowController extends Thread implements Initializable{
@FXML
private TextField dayText;
@FXML
private TextField monthText;
@FXML
private TextField yearText;
@FXML
private TextField hoursText;
@FXML
private TextField minutesText;
@FXML
private TextField secondsText;
@FXML
private TextField julianDayText;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
this.start();
}
@Override
public void run() {
while(true){
DateTime d = new DateTime(System.currentTimeMillis());
dayText.setText(String.valueOf(d.getDayOfMonth()));
monthText.setText(String.valueOf(d.getMonthOfYear()));
yearText.setText(String.valueOf(d.getYear()));
hoursText.setText(String.valueOf(d.getHourOfDay()));
minutesText.setText(String.valueOf(d.getMinuteOfHour()));
secondsText.setText(String.valueOf(d.getSecondOfMinute()));
}
}
}
我不知道为什么我在运行我的代码后得到一个 NullPointerException(它工作了一点然后它崩溃了):
Exception in thread "Thread-4" java.lang.NullPointerException
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:339)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.scene.control.TextInputControl$TextProperty.fireValueChangedEvent(TextInputControl.java:1116)
at javafx.scene.control.TextInputControl$TextProperty.markInvalid(TextInputControl.java:1120)
at javafx.scene.control.TextInputControl$TextProperty.set(TextInputControl.java:1056)
at javafx.scene.control.TextInputControl.setText(TextInputControl.java:279)
at application.MainWindowController.run(MainWindowController.java:208)
请帮助并提前致谢
【问题讨论】:
-
你班级的字段为空。你必须这样写:TextField dayText = new TextField();
-
感谢您的评论。我忘了提到我确实尝试过,但它也不起作用。因为我使用一个 FXML 文件来实例化我的 texFields,所以我不会在我的控制器中再次实例化它们,如果我错了,请纠正我。再次感谢。
-
不要让你的控制器扩展线程!!!
-
完全不要使用线程。相反,请使用此处建议的时间线:stackoverflow.com/questions/9966136/…
标签: java multithreading javafx settext