Я хочу, чтобы отображались данные импорта данных из Excel в данные в формате Label или Text FXML.Процесс может отображаться в командной строке, но для текста или метки FXML может отображать только последние данные.
Это мой код:
package com.donykis.datasaham.view;
import com.donykis.datasaham.interfaces.KoneksiDB;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ResourceBundle;
public class RuangUploadHargaSahamController implements Initializable {
private Stage dialogStage;
public File selectedFile;
@FXML
public Text actionStatus;
@FXML
public Label lbltext;
@FXML
public TextField actionText;
@FXML
private Button Btnupload;
@FXML
private Button Btncancel;
public RuangUploadHargaSahamController() {
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
@FXML
private void btnImport(ActionEvent event) throws FileNotFoundException, IOException {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Pilih File Excel");
FileChooser.ExtensionFilter extFilter = new
FileChooser.ExtensionFilter("Excel files (*.xls)", "*.xls");
fileChooser.getExtensionFilters().add(extFilter);
selectedFile = fileChooser.showOpenDialog(dialogStage);
if ( selectedFile != null) {
System.out.println("File selected: " + selectedFile.getName());
String stringText = selectedFile.getName();
lbltext.setText("File selected: " + stringText);
actionStatus.setText("File selected: " + stringText);
startTask();
} else {
// actionStatus.setText("File selection cancelled.");
lbltext.setText(null);
actionStatus.setText(null);
}
}
В приведенном выше коде я хочу убедиться, что файлможно прочитать, как на картинке ниже, поэтому я знаю имя файла, который был взят 
Затем файл читается и выполняется, когда данные из Excel извлекаются и вводятся вбаза данных.Я пытался использовать FXML Label и Text.
Затем код обрабатывает данные из Excel в базу данных вместе со следующим кодом:
public void startTask()
{
// Create a Runnable
Runnable task = new Runnable()
{
public void run()
{
runTask();
}
};
// Run the task in a background thread
Thread backgroundThread = new Thread(task);
// Terminate the running thread if the application exits
backgroundThread.setDaemon(true);
// Start the thread
backgroundThread.start();
}
public void runTask()
{
final int[] i = new int[1];
int numRow;
Label lblRow1;
Connection con;
PreparedStatement s5 = null;
final PreparedStatement[] s6 = {null};
con = KoneksiDB.getKoneksi();
FileInputStream input = null;
try {
input = new FileInputStream(new File(String.valueOf(selectedFile)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
POIFSFileSystem fis = null;
try {
fis = new POIFSFileSystem(input);
} catch (IOException e) {
e.printStackTrace();
}
HSSFWorkbook workbook = null;
try {
workbook = new HSSFWorkbook(fis);
} catch (IOException e) {
e.printStackTrace();
}
HSSFSheet sheet = workbook.getSheetAt(0);
numRow = sheet.getPhysicalNumberOfRows();
final Row[] row = new Row[1];
{
try
{
// Get the Status
// Update the Label on the JavaFx Application Thread
Platform.runLater(new Runnable()
{
@Override
public void run()
{
for (i[0] = 1; i[0] <= sheet.getLastRowNum(); i[0]++)
{
row[0] = sheet.getRow(i[0]);
String col9 =
row[0].getCell(1).getStringCellValue();
double col10 =
row[0].getCell(9).getNumericCellValue();
String sqlcommand9 = "UPDATE hg_saham SET
harga_harian= '" + col10 + "' WHERE kode_saham='" + col9 + "'";
try {
s6[0] = (PreparedStatement)
con.prepareStatement(sqlcommand9);
} catch (SQLException e) {
e.printStackTrace();
}
try {
s6[0].addBatch();
} catch (SQLException e) {
e.printStackTrace();
}
try {
s6[0].executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Processing " + i[0] + " of " +
sheet.getLastRowNum());
}
String status = "Processing " + i[0] + " of " +
sheet.getLastRowNum();
actionStatus.setText(status);
lbltext.setText(status);
}
});
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
@FXML
private void handleKembali(ActionEvent event) {
dialogStage.close();
}
public void setDialog(Stage dialogStage) {
this.dialogStage = dialogStage;
}
}
В командной строке этот процесс четко видени работает хорошо, как на картинке 
В тексте и на этикетке будут отображаться только последние данные, как на изображении
