Я занимаюсь разработкой программы GUI на JavaFX, которая выполняется в основном потоке, также существует метод RFID, который открывает считыватель для сбора данных, и этот метод RFID должен выполняться в фоновом режиме одновременно с окном GUI , то, что происходит в данный момент, это то, что метод RFID запускается сначала, пока не завершится (5 секунд), а затем GUI запускается сразу после этого. Таким образом, я попытался запустить метод RFID в отдельном потоке и поместить в метод run
, но была бы ошибка, как показано:
RFID rfid = new RFID(); // Error message : Default constructor cannot handle exception type PhidgetException thrown by implicit super constructor. Must define an explicit constructor
Так что я обнаружил, что исправить эту ошибку мне нужно иметь конструктор, (public MainController () { ... } )
и вызов run
внутри него, но на самом деле это ничего не помогает. Потоки GUI и RFID по-прежнему работают отдельно один за другим.
Любые предложения, ребята, я был бы очень благодарен и признателен!
Класс MainController:
public class MainController extends Thread {
RFID rfid = new RFID();
public void run(){
rfid.addTagListener(new RFIDTagListener() {
public void onTag(RFIDTagEvent e) {
try {
ReaderNo = String.valueOf(rfid.getDeviceSerialNumber());
} catch (PhidgetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Reader serial number is " + ' '+ReaderNo);
wallet walletData = new wallet("385055");
walletJson = gson.toJson(walletData);
String resultfromserver = sendToServer(walletJson);
System.out.println("DEBUG: data in json : " +resultfromserver);
wallet walletObject = gson.fromJson(resultfromserver,
wallet.class);
System.out.println("DEBUG: The wallet's Data: "+' '+ walletObject);
WalletName.setText(walletObject.getWalletName());
}
});
rfid.addTagLostListener(new RFIDTagLostListener() {
// What to do when a tag is lost
public void onTagLost(RFIDTagLostEvent e) {
// optional print, used as debug here
System.out.println("DEBUG: Tag lost: " + e.getTag());
}
});
try {
rfid.open(50000);
} catch (PhidgetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
System.out.println("\n\nGathering data for 15 seconds\n\n");
Thread.sleep(15000);
} catch (Exception ex) {
ex.printStackTrace();
}
try {
rfid.close();
} catch (PhidgetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public MainController() throws PhidgetException {
run();
}
}
Основной класс:
public class Main extends Application {
public static void main(String[] args) throws PhidgetException {
launch(args);
MainController object = new MainController();
object.start();
}
}