0

I've the fallowing problem. When i press the Button, i execute a Service, that parse a html page and put the results in a Table. But when i click on the Table, while the Service is running, the Service will be terminated. Can someone help me with this problem?

Here is my Controller-Class

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;
       }
    }
Patrick
  • 4,382
  • 2
  • 25
  • 32
Flagman
  • 366
  • 4
  • 23
  • What is the error when the service stops ? – ItachiUchiha Jul 25 '14 at 11:55
  • So i've added a setOnFail Event to the Service. And now i became the following error: java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5 – Flagman Jul 25 '14 at 12:14
  • Now it work with the solution from [here](http://stackoverflow.com/questions/17850191/why-am-i-getting-java-lang-illegalstateexception-on-javafx) – Flagman Jul 25 '14 at 12:41

0 Answers0