Локальные переменные, на которые ссылается внутренний класс, должны быть окончательными или эффективно конечными
Пожалуйста, посмотрите на код ниже
private void displayInitialRevenue_Method() {
//Get the dates from the combo
String selectedCouple = revenueYearCombo.getSelectedItem().toString();
if (selectedCouple.equals("Select Year")) {
return;
}
String[] split = selectedCouple.split("/");
//Related to DB
double totalAmount = 0.0;
//Get data from the 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 is empty");
} else {
while (selectAllDetails.next()) {
String clientName = selectAllDetails.getString("Client Name");
String providerName = selectAllDetails.getString("Provider Name");
Double amountInvested = selectAllDetails.getDouble("Invest_Amount");
//Update the table
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Object[] row = {clientName, providerName, amountInvested};
model.addRow(row);
}
});
//Get the total
totalAmount = totalAmount + amountInvested;
}
//Add the 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());
}
}
Весь этот метод выполняется внутри другого потока. Обновления интерфейса работают внутриSwingUtilities.InvokeLater()
, Однако просьба обратить внимание на ниже.
Object[]row = {totalAmount};
model.addRow(row);
ПеременнаяtotalAmount
не является окончательным и не может быть окончательным, потому что это должно быть рассчитано в приведенном вышеwhile loop
, Так как это неfinal
Я не могу использовать его внутриSwingUtilities.InvokeLater()
как говорит ошибкаLocal variables referred from inner class must be final or effectively final