Javafx 单击TableView时服务终止

Javafx 单击TableView时服务终止,javafx,javafx-8,Javafx,Javafx 8,我有休闲的问题。 当我按下按钮时,我执行一个服务,该服务解析html页面并将结果放入表格中。但是,当我单击表时,服务正在运行,服务将被终止。 有人能帮我解决这个问题吗 这是我的控制器类 public class ProxySearchController implements Initializable { private Scene scene; @FXML private Button

我有休闲的问题。 当我按下
按钮
时,我执行一个服务,该服务解析html页面并将结果放入表格中。但是,当我单击表时,服务正在运行,服务将被终止。 有人能帮我解决这个问题吗

这是我的控制器类

public class ProxySearchController implements Initializable {

       private Scene                             scene;
       @FXML
       private Button                            btn_refresh;
       @FXML
       private TableView<ProxyResult>            tbl_results;
       @FXML
       private ProgressBar                       pb_search;
       @FXML
       private TableColumn<ProxyResult, String>  column_ip;
       @FXML
       private TableColumn<ProxyResult, Integer> column_port;
       @FXML
       private TableColumn<ProxyResult, Locale>  column_locale;
       @FXML
       private TableColumn<ProxyResult, String>  column_anonymity;
       @FXML
       private TableColumn<ProxyResult, Boolean> column_google;
       @FXML
       private TableColumn<ProxyResult, Boolean> column_https;
       @FXML
       private TableColumn<ProxyResult, String>  column_lastchecked;
       @FXML
       private TableColumn<ProxyResult, Long>    column_response;

       private ObservableList<ProxyResult>       data   = FXCollections.observableArrayList();

       /*
        * (non-Javadoc)
        * 
        * @see javafx.fxml.Initializable#initialize(java.net.URL, java.util.ResourceBundle)
        */
       @Override
       public void initialize(URL location, ResourceBundle resources) {

          tbl_results.setItems(data);
          tbl_results.getSelectionModel().setCellSelectionEnabled(true);

          Clipboard clipboard = Clipboard.getSystemClipboard();
          // add listner to your tableview selecteditemproperty
          tbl_results.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<ProxyResult>() {

             @Override
             public void changed(ObservableValue observable, ProxyResult oldValue, ProxyResult newValue) {

                ObservableList<TablePosition> posList = tbl_results.getSelectionModel().getSelectedCells();
                int old_r = -1;
                StringBuilder clipboardString = new StringBuilder();
                for (TablePosition p : posList) {
                   int r = p.getRow();
                   int c = p.getColumn();
                   Object cell = tbl_results.getColumns().get(c).getCellData(r);
                   if (cell == null)
                      cell = "";
                   if (old_r == r)
                      clipboardString.append('\t');
                   else if (old_r != -1)
                      clipboardString.append('\n');
                   clipboardString.append(cell);
                   old_r = r;
                }
                final ClipboardContent content = new ClipboardContent();
                content.putString(clipboardString.toString());
                Clipboard.getSystemClipboard().setContent(content);
             }
          });

          column_ip.setCellValueFactory(new PropertyValueFactory<ProxyResult, String>("ip"));
          column_port.setCellValueFactory(new PropertyValueFactory<ProxyResult, Integer>("port"));
          column_locale.setCellValueFactory(new PropertyValueFactory<ProxyResult, Locale>("locale"));
          column_anonymity.setCellValueFactory(new PropertyValueFactory<ProxyResult, String>("anonymity"));
          column_google.setCellValueFactory(new PropertyValueFactory<ProxyResult, Boolean>("google"));
          column_https.setCellValueFactory(new PropertyValueFactory<ProxyResult, Boolean>("https"));
          column_lastchecked.setCellValueFactory(new PropertyValueFactory<ProxyResult, String>("lastChecked"));
          column_response.setCellValueFactory(new PropertyValueFactory<ProxyResult, Long>("responseTime"));
       }

       public void handleSearchButton(ActionEvent event) {

          Service<Void> searchWorker = new SearchProxyWorker(pb_search, data);

          searchWorker.setOnSucceeded(new EventHandler<WorkerStateEvent>() {

             @Override
             public void handle(WorkerStateEvent event) {

                System.out.println("Tadaaa");
             }

          });

          searchWorker.start();
       }

       /**
        * Set the current scene.
        * 
        * @param scene A scene
        */
       public void setScene(Scene scene) {

          this.scene = scene;
       }
    }
公共类ProxySearchController实现可初始化{
私密场景;
@FXML
私人按钮btn_刷新;
@FXML
私有TableView tbl_结果;
@FXML
私人ProgressBar pb_搜索;
@FXML
私有表列ip;
@FXML
专用表列_端口;
@FXML
专用表列\本地语言环境;
@FXML
私有表列\匿名性;
@FXML
私有表列(google);;
@FXML
私有表列https;
@FXML
private table column column\u lastchecked;
@FXML
私有表列_响应;
私有ObservableList data=FXCollections.observableArrayList();
/*
*(非Javadoc)
* 
*@see javafx.fxml.Initializable#initialize(java.net.URL,java.util.ResourceBundle)
*/
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
tbl_结果设置项(数据);
tbl_results.getSelectionModel().setCellSelectionEnabled(true);
剪贴板=剪贴板。getSystemClipboard();
//将listner添加到tableview selecteditemproperty
tbl_results.getSelectionModel().SelectEditeProperty().addListener(新的ChangeListener()){
@凌驾
公共无效已更改(ObservableValue observable、ProxyResult oldValue、ProxyResult newValue){
ObservableList posList=tbl_results.getSelectionModel().getSelectedCells();
int old_r=-1;
StringBuilder clipboardString=新建StringBuilder();
用于(表位置p:posList){
int r=p.getRow();
int c=p.getColumn();
Object cell=tbl_results.getColumns().get(c)、getCellData(r);
if(单元格==null)
单元格=”;
if(old_r==r)
clipboardString.append('\t');
else if(old_r!=-1)
clipboardString.append('\n');
clipboardString.append(单元格);
old_r=r;
}
最终剪贴簿内容=新剪贴簿内容();
content.putString(clipboardString.toString());
Clipboard.getSystemClipboard().setContent(content);
}
});
列_ip.setCellValueFactory(新属性值工厂(“ip”));
列_port.setCellValueFactory(新属性ValueFactory(“端口”);
列_locale.setCellValueFactory(新的PropertyValueFactory(“locale”));
列_匿名性.setCellValueFactory(新属性值工厂(“匿名”));
column_google.setCellValueFactory(新的PropertyValueFactory(“谷歌”));
列_https.setCellValueFactory(新的PropertyValueFactory(“https”));
列_lastchecked.setCellValueFactory(新属性ValueFactory(“lastchecked”);
列\u response.setCellValueFactory(新建PropertyValueFactory(“responseTime”);
}
public void handleSearchButton(ActionEvent事件){
服务searchWorker=新的SearchProxyWorker(pb_搜索,数据);
searchWorker.setOnSucceeded(新的EventHandler(){
@凌驾
公共无效句柄(WorkerStateEvent事件){
System.out.println(“Tadaaa”);
}
});
searchWorker.start();
}
/**
*设置当前场景。
* 
*@param场景A场景
*/
公共场景(场景){
这个场景=场景;
}
}

服务停止时会出现什么错误?因此我在服务中添加了一个setOnFail事件。现在我犯了以下错误:java.lang.IllegalStateException:不在FX应用程序线程上;currentThread=Thread-5现在它可以与来自