java - Local variables referred from inner class must be final or effectively final -
please have @ below code
private void displayinitialrevenue_method() { //get dates combo string selectedcouple = revenueyearcombo.getselecteditem().tostring(); if (selectedcouple.equals("select year")) { return; } string[] split = selectedcouple.split("/"); //related db double totalamount = 0.0; //get data database dbconnector = new dbhandler(); dbconnector.makeconnection(); defaulttablemodel model = (defaulttablemodel) initialrevenuetable.getmodel(); model.setrowcount(0); resultset selectalldetails = dbconnector.selectalldetails("sql code "); try { if (selectalldetails.isbeforefirst() == false) { joptionpane.showmessagedialog(null, "this table empty"); } else { while (selectalldetails.next()) { string clientname = selectalldetails.getstring("client name"); string providername = selectalldetails.getstring("provider name"); double amountinvested = selectalldetails.getdouble("invest_amount"); //update table swingutilities.invokelater(new runnable() { public void run() { object[] row = {clientname, providername, amountinvested}; model.addrow(row); } }); //get total totalamount = totalamount + amountinvested; } //add sum swingutilities.invokelater(new runnable() { public void run() { object[] blankrow = {null}; model.addrow(blankrow); object[] row = {totalamount}; model.addrow(row); } }); } } catch (sqlexception sql) { joptionpane.showmessagedialog(null, sql.getlocalizedmessage()); } }
this entire method running inside thread. ui updates running inside swingutilities.invokelater()
. pls put attention below.
object[]row = {totalamount}; model.addrow(row);
the variable totalamount
not final , cannot final because need calculated in above while loop
. since not final
unable use inside swingutilities.invokelater()
error says local variables referred inner class must final or final
you can make additional variable is final , copy final result of calculation it.
while (selectalldetails.next()) { string clientname = selectalldetails.getstring("client name"); string providername = selectalldetails.getstring("provider name"); double amountinvested = selectalldetails.getdouble("invest_amount"); //update table swingutilities.invokelater(new runnable() { public void run() { object[] row = {clientname, providername, amountinvested}; model.addrow(row); } }); //get total totalamount = totalamount + amountinvested; } final double totalamountinvested = totalamount; // , use 1 in inner
Comments
Post a Comment