java - Write operation being executed in JTextArea -



java - Write operation being executed in JTextArea -

i've wrote app creates graph images based on list of x : f(x). @ gui, should show pair beingness written on graph @ moment, jtextarea show messages after loop generates image done. how can messages shown @ real time?

i've thought on using multi thread, still didn't worked.

below code of graph generator:

public static void processfile(string filename, string currentdir){ file file = new file(filename); logwindow logwindow = showlogwindow(); string line, function; treemap<integer, integer> dataset = null; try(bufferedreader reader = new bufferedreader(new filereader(file))) { logwindow.log("starting processing of file " + file.getname()); skipheader(reader, constantes.header_lines); while ((line = reader.readline()) != null){ if(line.startswith("function ")){ function = line.substring(25, 35).trim(); if(dataset != null){ logwindow.log("graph of function " + function + " created."); graph demo = new graph(dataset); demo.writeaspng(currentdir + file.separator + function + ".png"); } dataset = new treemap<integer, integer>(); }else{ int x = integer.valueof(line.substring(20,25).trim()); int fx = integer.valueof(line.substring(25,30).trim()); dataset.put(x, fx); logwindow.log("adding values of x = " + x + " , f(x) = " + fx); } } //writing lastly set of info logwindow.log("graph of function " + function + " created."); graph demo = new graph(dataset); demo.writeaspng(currentdir + file.separator + function + ".png"); } grab (filenotfoundexception e) { //todo log improve e.printstacktrace(); } grab (ioexception e) { //todo log improve e.printstacktrace(); } }

and code of logwindow class

public class logwindow extends jpanel { private jtextarea log; public logwindow() { super(new borderlayout()); log = new jtextarea(5,40); log.setmargin(new insets(5,5,5,5)); log.seteditable(false); jscrollpane logscrollpane = new jscrollpane(log); add(logscrollpane, borderlayout.center); } public void log(string message){ logthread t = new logthread(log, message); t.start(); seek { t.join(); } grab (interruptedexception e) { // todo log improve e.printstacktrace(); } } } class logthread extends thread{ jtextarea log; string message; public logthread(jtextarea log, string message) { this.log = log; this.message = message; } @override public void run() { log.append(message + constantes.linebreak); log.setcaretposition(log.getdocument().getlength()); } }

thanks in advance

your code incompleted, post sscce/mvce

you have issue concurency in swing, swing single threaded , updates visible awt/swing gui must on edt

quick prepare wrap log.append(message + constantes.linebreak); invokelater()

no thought why reason there t.join();

(repeatly called) code line log.setcaretposition(log.getdocument().getlength()); should replaced (works in case updates done on edt) single definition jtextarea/event. jtextcomponent

.

defaultcaret caret = (defaultcaret) log.getcaret(); caret.setupdatepolicy(defaultcaret.always_update);

java multithreading swing

Comments

Popular posts from this blog

model view controller - MVC Rails Planning -

ruby on rails - Devise Logout Error in RoR -

html - Submenu setup with jquery and effect 'fold' -