doInBackground () останавливается и не заканчивается - PullRequest
0 голосов
/ 09 января 2019

Я пишу приложение с графическим интерфейсом и использую кнопку. Если я нажимаю на кнопку, мое приложение должно выполнить онлайн-запрос. Я хочу установить «Пожалуйста, подождите» 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. После изменения Panel запускается метод 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.java и ThreadPoolExecutor.java и останавливает метод doInBackground.

...