Javafx 2 javafx IllegalArguementException当弹出窗口打开并且在后台舞台上单击鼠标时

Javafx 2 javafx IllegalArguementException当弹出窗口打开并且在后台舞台上单击鼠标时,javafx-2,tableview,type-mismatch,onmouseclick,Javafx 2,Tableview,Type Mismatch,Onmouseclick,点击它,我启动一个弹出窗口。Pop有一个动态创建的stackpane和一个tableview。如果我双击表中的一行或输入esc,则其工作状态良好。 问题是当我点击后台舞台上的任何地方时,它会给我以下错误。如何在单击弹出窗口启动的阶段时关闭弹出窗口。请建议 java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

点击它,我启动一个弹出窗口。Pop有一个动态创建的stackpane和一个tableview。如果我双击表中的一行或输入esc,则其工作状态良好。 问题是当我点击后台舞台上的任何地方时,它会给我以下错误。如何在单击弹出窗口启动的阶段时关闭弹出窗口。请建议

java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1435)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3324)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3164)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228)
at com.sun.glass.ui.View.handleMouseEvent(View.java:528)
at com.sun.glass.ui.View.notifyMouse(View.java:922)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
at java.lang.Thread.run(Thread.java:722)
下面是我的代码

public void trkTripNoBtnClick(ActionEvent ae){
    StackPane st = new StackPane();
    final TableView<GatePassDTO> tripListTableView = new TableView<GatePassDTO>();
    TableColumn<GatePassDTO,String> colTrkTripNo = new TableColumn<GatePassDTO,String>();
    TableColumn<GatePassDTO,Date> colGatePassDttm = new TableColumn<GatePassDTO,Date>();
    TableColumn<GatePassDTO,String> colTruckNo = new TableColumn<GatePassDTO,String>();
    TableColumn<GatePassDTO,String> colBat = new TableColumn<GatePassDTO,String>();
    colTrkTripNo.setText("Trip No");
    colTrkTripNo.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("tourPlnNo"));
    colGatePassDttm.setText("Gate Pass Dttm");
    colGatePassDttm.setCellValueFactory(new PropertyValueFactory<GatePassDTO,Date>("gatePassDttm"));
    colTruckNo.setText("Truck");
    colTruckNo.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("haulPmNo"));
    colBat.setText("BAT ID");
    colBat.setCellValueFactory(new PropertyValueFactory<GatePassDTO,String>("batId"));
    List<GatePassDTO> tripsList = GateIn.getGatePassReference().gateIn_tourPlnNoLookUp(1);
    tripListTableView.getColumns().addAll(colTrkTripNo,colGatePassDttm,colTruckNo,colBat);
    tripListTableView.setItems(FXCollections.observableList(tripsList));
    final Popup popup = new Popup(); 
    popup.setX(txtTrkTripNo.getLayoutX()); 
    popup.setY(txtTrkTripNo.getLayoutY()+txtTrkTripNo.getHeight()+30);

    colTrkTripNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20));
    colGatePassDttm.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.45));
    colTruckNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.15));
    colBat.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20));
    tripListTableView.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent t) {
            if(t.getClickCount() == 2 && tripListTableView.getSelectionModel().getSelectedItem() !=null){
                GatePassDTO g = tripListTableView.getSelectionModel().getSelectedItem();
                popup.hide();
                txtTrkTripNo.setText(g.getTourPlnNo());
                getTripDetails(txtTrkTripNo.getText());
            }
        }   
    });
    tripListTableView.addEventHandler(KeyEvent.KEY_PRESSED,new EventHandler<KeyEvent>(){

        @Override
        public void handle(KeyEvent t) {
            if(t.getCode() == KeyCode.ESCAPE)
                popup.hide();
        }

    });
    /*Label lblFind = new Label("Find");
    TextField txtfind = new TextField();
    st.getChildren().add(lblFind);
    st.getChildren().add(txtfind);*/
    st.getChildren().add(tripListTableView);
    VBox v = new VBox(5);
    v.getChildren().addAll(st);
    popup.getContent().addAll(v);       
    popup.show(GateIn.primaryStage);    
}
public void trkTripNoBtnClick(ActionEvent ae){
StackPane st=新的StackPane();
final TableView tripListTableView=新建TableView();
TableColumn colTrkTripNo=新TableColumn();
TableColgatePassDTTM=新TableColumn();
TableColumn colTruckNo=新TableColumn();
TableColumn colBat=新的TableColumn();
colTrkTripNo.SETEXT(“行程号”);
colTrkTripNo.setCellValueFactory(新属性值工厂(“tourPlnNo”);
colGatePassDttm.setText(“gatepassdttm”);
colGatePassDttm.setCellValueFactory(新的PropertyValueFactory(“gatePassDttm”));
colTruckNo.setText(“卡车”);
colTruckNo.setCellValueFactory(新的PropertyValueFactory(“haulPmNo”));
colBat.setText(“BAT ID”);
colBat.setCellValueFactory(新的PropertyValueFactory(“batId”);
List tripsList=GateIn.getGatePassReference().GateIn\u tourPlnNoLookUp(1);
tripListTableView.getColumns().addAll(colTrkTripNo、colgatePassdtttm、colTruckNo、colBat);
setItems(FXCollections.observableList(tripsList));
最终弹出窗口=新弹出窗口();
setX(txtTrkTripNo.getLayoutX());
setY(txtTrkTripNo.getLayoutY()+txtTrkTripNo.getHeight()+30);
colTrkTripNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20));
colGatePassDttm.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.45));
colTruckNo.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.15));
colBat.prefWidthProperty().bind(tripListTableView.widthProperty().multiply(0.20));
tripListTableView.addEventHandler(单击MouseEvent.MOUSE_,新建EventHandler()){
@凌驾
公共无效句柄(MouseEvent t){
如果(t.getClickCount()==2&&tripListTableView.getSelectionModel().getSelectedItem()!=null){
GatePassDTO g=tripListTableView.getSelectionModel().getSelectedItem();
popup.hide();
txtTrkTripNo.setText(g.getTourPlnNo());
getTripDetails(txtTrkTripNo.getText());
}
}   
});
tripListTableView.addEventHandler(按下KeyEvent.KEY_,新建EventHandler()){
@凌驾
公共无效句柄(KeyEvent t){
if(t.getCode()==KeyCode.ESCAPE)
popup.hide();
}
});
/*标签lblFind=新标签(“查找”);
TextField txtfind=新建TextField();
st.getChildren().add(lblFind);
st.getChildren().add(txtfind)*/
st.getChildren().add(tripListTableView);
VBox v=新的VBox(5);
v、 getChildren().addAll(st);
popup.getContent().addAll(v);
弹出显示(GateIn.primaryStage);
}

您必须检查阶段的焦点属性

试试这个,它奏效了

stage.focusedProperty().addListener(new ChangeListener<Boolean>
    () {

        @Override
        public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
           if(t1==false)
           {
               System.out.println("focus losted");
               btn.getScene().getWindow().hide();
           }
        }
    });
stage.focusedProperty().addListener(新的ChangeListener
() {
@凌驾

更改公众假期(ObservalEvalue你能显示代码吗?你能把鼠标事件只放在桌子上吗?或者完成舞台吗?@Anshul Parashar在我的问题中添加了代码。我给出了一个答案,尝试一下鼠标点击桌子是否工作得很好。问题是当弹出窗口关闭时,我在弹出窗口外点击鼠标open@Sil我编辑了上面的答案…实际上问题不在你们的代码中,你们需要知道勾选您的弹出窗口…即当您在弹出窗口外单击时,它不工作,它由modalitylike在ms word中完成,当我们单击“查找弹出窗口”时,它是打开的,但当在弹出窗口外单击时,它不工作,直到弹出窗口不关闭,但我希望在单击“外部”时弹出窗口关闭。@Sil我已编辑答案…您需要使用focusproperty完成此操作()试着编写代码,它工作了……在这里