doInBackground()停止并且没有完成

时间:2019-01-09 08:11:11

标签: java swingworker

我编写了一个swing GUI应用程序,并使用了一个按钮。如果单击按钮,则我的应用程序需要进行一些在线请求。我现在想设置一个“请稍候” JPanel。因此,我使用SwingWorker。一切正常。 doInBackground()方法已启动,但尚未完成。

我调试了应用程序,发现如果创建一个新对象,该应用程序将进入类FutureTask.java并调用方法run(),此后它将进入ThreadPoolExecutor.java runWorker方法,线程在那里停止。

private void buttonBuchenActionPerformed(java.awt.event.ActionEvent evt) { 
mainProg.showInfoWithoutButton(80000, "Please wait", mainProg.getPanel_first());
           startPayment();
                }

单击按钮后,我使用showInfoWithoutButton Methode更改面板。更改面板后,startPayment()方法启动。

 public void startPayment() {
    new SwingWorker<Void, Void>() {
        @Override
        public Void doInBackground() {

    Calendar cal = Calendar.getInstance();
    DateFormat formatDb = new SimpleDateFormat("yyyy-MM-dd");
    Date date1;
    try {
        date1 = formatDb.parse(mainProg.getFreeRoom().getAbreiseBeds());
        cal.setTime(date1);
        cal.add(Calendar.DAY_OF_MONTH, -1);
    } catch (ParseException ex) {
        Logger.getLogger(EnterConfirmation.class.getName()).log(Level.SEVERE, null, ex);
    }

    String date = formatDb.format(cal.getTime());


    try {
        boolean paymentSuccess;
        if(mainProg.getConfig().getString("terminal").equals("true")){
        mainProg.getOpp().connectOpp();
        paymentSuccess = mainProg.getOpp().startPayment(mainProg.getFreeRoom().getPriceGesamt(), mainProg);}


        else  paymentSuccess = true;

        DBController db = new DBController();
        db.initDBConnection();

        //numberOfAvailbility is the unit. 
        String numberOfAvailbility = db.getQtyOfAvailbilityFromID(mainProg.getFreeRoom().getId());

        if(paymentSuccess == true){
//----------------------------------
// HERE IT GOES TO FutureTask.java and the methode finish: 
              JsonNewBooking a = new JsonNewBooking(mainProg.getFreeRoom().getId(), 1, mainProg.getFreeRoom().getAnreiseBeds(), date, mainProg.getFreeRoom().getGuestnr(), mainProg.getBooking().getName(), mainProg.getBooking().getEmail(), mainProg.getBooking().getStreet(), mainProg.getBooking().getPlace(), mainProg.getBooking().getLand(), String.valueOf(mainProg.getFreeRoom().getPriceGesamt())); 
//----------------------------------
              String bookid = a.setBookingToBeds();

              if(mainProg.getConfig().getString("terminal").equals("1"))
              mainProg.getOpp().printReceipt(paymentSuccess);

                  if (!bookid.equals("null")) {
                  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Date checkInDay = simpleDateFormat.parse(mainProg.getFreeRoom().getAnreiseBeds());
            Date todayDate = simpleDateFormat.parse(simpleDateFormat.format(new Date()));

            if (checkInDay.compareTo(todayDate) == 0) {
                System.out.println(bookid);
                //ReturnKeyWithoutTerminal because was 100% paid already
                gui.return.returnWithoutTerminal(mainProg, bookid);

                mainProg.getFreeRoom().reset();
                mainProg.getBooking().reset();
                mainProg.getPanel_bookNow().resetAll();
                mainProg.resetPanel();
                mainProg.getBackToMainPanelTimer().stop();

            } else {

                mainProg.getFreeRoom().reset();
                mainProg.getFreeRoom().reset();
                mainProg.getPanel_bookNow().resetAll();
                mainProg.resetPanel();
                mainProg.getBackToMainPanelTimer().stop();
            }

        } catch (ParseException ex) {
            Logger.getLogger(EnterConfirmation.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
        }else
            mainProg.getOpp().printReceipt(paymentSuccess);

    } catch (IOException ex) {
        Logger.getLogger(EnterConfirmation.class.getName()).log(Level.SEVERE, null, ex);
    }

            return null;

        }}.execute();

 }

通常该方法应该正常完成,但是它会在我创建对象“ a”的行处停止(对不起,这个坏名字)。

也许有人知道为什么调用类FutureTask.javaThreadPoolExecutor.java并停止doInBackground方法。

0 个答案:

没有答案