Я пытаюсь понять, как потоки работают в java. Это простой запрос базы данных, который возвращает ResultSet. Я использую JavaFx.
package application;
import java.sql.ResultSet;
import java.sql.SQLException;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class Controller{
@FXML
private Button getCourseBtn;
@FXML
private TextField courseId;
@FXML
private Label courseCodeLbl;
private ModelController mController;
private void requestCourseName(){
String courseName = "";
Course c = new Course();
c.setCCode(Integer.valueOf(courseId.getText()));
mController = new ModelController(c);
try {
ResultSet rs = mController.<Course>get();
if(rs.next()){
courseCodeLbl.setText(rs.getString(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// return courseName;
}
public void getCourseNameOnClick(){
try {
// courseCodeLbl.setText(requestCourseName());
Thread t = new Thread(new Runnable(){
public void run(){
requestCourseName();
}
}, "Thread A");
t.start();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Это возвращает исключение:
Исключение в потоке "Thread A" java.lang.IllegalStateException: не в потоке приложения FX; currentThread = Thread A
Как правильно выполнить потоки, чтобы каждый запрос базы данных выполнялся во втором потоке вместо основного потока?
Я слышал о внедрении Runnable, но как я могу вызвать разные методы в методе run?
Никогда раньше не работал с потоками, но я думал, что на это настало время.