私は、Bluetooth 経由で送信されるデータをリッスンする必要があるケースがある javafx アプリケーションを作成しています。Bluetooth を初期化し、データのリッスンを開始する必要がある fxml ウィンドウが 1 つあります。

以下は fxml コントローラーのコードです。

//all imports 

public class NewBarcodeInvoicePaneController  implements Initializable{
    private BluetoothController bc;

    public BluetoothController getBc() {
        return bc;
    }    
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        try {
            bc = new BluetoothController();
            new Thread(bc).start();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }  
}

BluetoothControllerはBluetoothを初期化してデータを聞くタスクです

public class BluetoothController extends Task<Void> {
    @Override
    protected Void call() throws Exception {
        LocalDevice local = null;
        StreamConnectionNotifier notifier;
        StreamConnection connection = null;

        // setup the server to listen for connection
        try {
            local = LocalDevice.getLocalDevice();
            try {
                local.setDiscoverable(DiscoveryAgent.GIAC);
            } catch (BluetoothStateException e) {
            }

            UUID uuid = new UUID(80087355); // "04c6093b-0000-1000-8000-00805f9b34fb"
            String url = "btspp://localhost:" + uuid.toString() + ";name=RemoteBluetooth";
            notifier = (StreamConnectionNotifier) Connector.open(url);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        try {
            System.err.println("THIS IS HAPENING");
            connection = notifier.acceptAndOpen();
            System.err.println("HAPENING???????????????????????????");
            InputStream inputStream = connection.openInputStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream));
            String lineRead = bReader.readLine();
            connection.close();
            inputStream.close();
            notifier.close();
            local.setDiscoverable(DiscoveryAgent.NOT_DISCOVERABLE);
            JSONParser parser = new JSONParser();
            Object obj = parser.parse(lineRead);
            JSONArray array = (JSONArray) obj;
            array.stream().map((o) -> (String) o).forEach((stringObj) -> {
                System.out.println(stringObj);
            });
            System.out.println("AFTER DATA RECIEVED");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }

}

Bluetooth経由でデータを送信し、notifier.acceptAndOpen()へのブロッキング呼び出しがブロックされていない場合は正常に動作します。問題は、データを渡さずに開いたウィンドウを閉じたい場合です。タスクによる追加のスレッドでブロッキング呼び出しがまだ開いています。次のように、このウィンドウを開くメインコントローラーでBluetoothControllerタスクをキャンセルしようとしました。

 private void openNewBarcodeInvoicePane(ActionEvent ae) {
        //following are custom classes to open windows from fxml and getting controller back for further manipulation
        PostoryModalWindow modalWindow = new PostoryModalWindow();
        modalWindow.openNewModalPaneWithParent("New Invoice", "fxml/newbarcodeinvoicepane.fxml", ae);
        //getting controller object 
        NewBarcodeInvoicePaneController controller = (NewBarcodeInvoicePaneController) modalWindow.getDswFromController();
        controller.getWindowStage().showAndWait();
        BluetoothController bc = controller.getBc();
        if(bc != null){
            System.err.println("CANCELLING");
            bc.cancel(true);
        }        
    }

しかし、InterrupttedException (Bluetooth スレッドを閉じる選択肢があるかもしれない) はスローされず、調査の結果、ソケットを待機しても割り込みでは機能しないことがわかりました。

これについて何か助けはありますか?
ありがとう