Java long calculations without freezes GUI (in single thread) -


at interview, me asked question: "how perform many calculations in single thread without freezes gui component progress bar or able check user input? (can execute 1 thread)"

i asked can write event loop node.js. me java have mechanism it. java can use hardware parallelization of operation. classes or special words can used task?

so, assuming can't use either swingworker or swing timer, create second thread support operations, choice you're left use swingutilities#invokelater repeatedly call method, performs small subset of work , updates ui before calling again (using swingutilities#invokelater)

look ma, no threads

import java.awt.eventqueue; import java.awt.gridbagconstraints; import java.awt.gridbaglayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jprogressbar; import javax.swing.swingutilities; import javax.swing.uimanager; import javax.swing.unsupportedlookandfeelexception;  public class nomorethreads {      public static void main(string[] args) {         new nomorethreads();     }      public nomorethreads() {         eventqueue.invokelater(new runnable() {             @override             public void run() {                 try {                     uimanager.setlookandfeel(uimanager.getsystemlookandfeelclassname());                 } catch (classnotfoundexception | instantiationexception | illegalaccessexception | unsupportedlookandfeelexception ex) {                     ex.printstacktrace();                 }                  jframe frame = new jframe("testing");                 frame.setdefaultcloseoperation(jframe.exit_on_close);                 frame.add(new testpane());                 frame.pack();                 frame.setlocationrelativeto(null);                 frame.setvisible(true);             }         });     }      public static class testpane extends jpanel {          protected static final int max = 1000;          private jprogressbar pb;         private jbutton start;         private int count;          public testpane() {             setlayout(new gridbaglayout());             gridbagconstraints gbc = new gridbagconstraints();             gbc.gridwidth = gridbagconstraints.remainder;             start = new jbutton("let's party started");             start.addactionlistener(new actionlistener() {                 @override                 public void actionperformed(actionevent e) {                     start.setenabled(false);                     calculate();                 }             });              pb = new jprogressbar(0, max);              add(start, gbc);             add(pb, gbc);         }          protected void calculate() {             count++;             if (count < max) {                 pb.setvalue(count);                 swingutilities.invokelater(new runnable() {                     @override                     public void run() {                         calculate();                     }                 });             } else {                 start.setenabled(true);             }         }      }  } 

Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -