2016-05-04 2 views
0

Итак, у меня есть небольшая головоломка, сделанная на Java, и давайте просто скажем, что на этой головоломке есть кнопки, которые представляют собой загадку. Существует метод решения, в котором нажата кнопка, чтобы найти «решение», и для ее решения требуется около 1 минуты, так что это одна минута только нажатий кнопокКак заморозить мой jframe, пока поток программы происходит в java

В течение этой минуты вы замечаете нажатием кнопки на компьютере, когда он меняет цвет и форму во время потока программы, мне было интересно, есть ли способ заморозить jframe до того, как метод solve() будет вызван, а затем разморозит в решении, когда метод закончен?

ответ

0

Я немного запутался именно то, что вы просите, но я хотел бы предложить использовать этот код, чтобы сделать то, что я считаю, что вы просите

private static boolean solveDone = false; //This should go in a the class, not here. 

    //Create a new thread to handle processes while the JFrame is frozen 
    SwingUtilities.invokeLater(new Thread(){ 
     public void run(){ 
      //Code to run while the JFrame is frozen should be put here. 
      main.solveDone = true; 
     } 
    }); 

    //Sleep the program until the process is done. 
    try{ 
     while(!solveDone) { 
      Thread.sleep(10); //Interval in milliseconds to check if the puzzle is done goes here. 
     } 
     solveDone = false; 
    }catch(InterruptedException e){ 
     e.printStackTrace(); 
     System.exit(-1); 
    } 

    //Code to run after solving goes here. 

Теперь, это не самый чистый способ сделать этот тип вещей, но я считаю, что он должен работать.

С другой стороны, если вы точно знаете, сколько времени это займет, вы можете это сделать.

SwingUtilities.invokeLater(new Thread(){ 
     public void run(){ 
      //Code to run while the JFrame is frozen should be put here. 
     } 
    }); 

    try{ 
     Thread.sleep(1000); //The time in milliseconds to sleep the JFrame 
    }catch(InterruptedException e){ 
     e.printStackTrace(); 
     System.exit(-1); 
    } 

    //Code to run after solving goes here. 
Смежные вопросы