I want to import an Excel file that contains large data in a TableView and filter the data and show the filtering in the TableView then export a new Excel file.
I started by importing the Excel file, for that I'm using Apache but I have a problem in a workbook that returns Java.lang.reflect.InvocationTargetException
error:
Controller Class:
public class Controller implements Initializable {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
//-------------TABLE COLUMN------------
@FXML // fx:id="firstNameCol"
private TableColumn<Data, String> nb1;
@FXML // fx:id="lastNameCol"
private TableColumn<Data, String> account;
@FXML // fx:id="netIDCol"
private TableColumn<Data, String> nb2;
@FXML // fx:id="ageCol"
private TableColumn<Data, Number> nb3;
@FXML // fx:id="gpaCol"
private TableColumn<Data, Number> idClient;
@FXML // fx:id="majorCol"
private TableColumn<Data, String> amount;
@FXML // fx:id="uinCol"
private TableColumn<Data, String> name;
@FXML // fx:id="genderCol"
private TableColumn<Data, String> gender;
@FXML // fx:id="genderCol"
private TableColumn<Data, String> typeAccount;
//-----------------TEXT FIELD---------
@FXML // fx:id="nameField"
private TextField nameField;
@FXML // fx:id="clientIDField"
private TextField clientIDField;
@FXML // fx:id="impIDField"
private TextField impIDField;
//----------Combo Box---------------
ObservableList<String> accountBoxData = FXCollections.observableArrayList("1", "2", "3", "4", "5");
@FXML // fx:id="accountBox"
private ComboBox<String> accountBox = new ComboBox<>();
@FXML
private TableView<Data> dataTableView;
//--------------- BUTTON--------------
@FXML // fx:id="clearBtn"
private Button clearBtn;
@FXML // fx:id="filterBtn"
private Button filterBtn;
//-----------------MENU BAR-------------
@FXML
private MenuBar fileMenu;
//-----------------Observable Data List-------------
@Override
public void initialize(URL location, ResourceBundle resources) {
accountBox.setItems(accountBoxData);
}
public void load(ActionEvent event) throws IOException {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open file");
File file = fileChooser.showOpenDialog(accountBox.getScene().getWindow());
System.out.println(file.getPath());
FileInputStream fileIn = new FileInputStream(file.getPath());
Workbook workbook = WorkbookFactory.create(fileIn);
Sheet sheet = workbook.getSheetAt(0);
for (int rowIndex = 0; rowIndex < sheet.getLastRowNum(); rowIndex++) {
Row row = sheet.getRow(rowIndex);
Data data = new Data();
if (row.getCell(0) != null) {
data.setAccount(row.getCell(0).getStringCellValue());
}
if (row.getCell(1) != null) {
data.setIdClient(row.getCell(1).getStringCellValue());
}
if (row.getCell(2) != null) {
data.setAmount(row.getCell(2).getStringCellValue());
}
if (row.getCell(3) != null) {
data.setName(row.getCell(3).getStringCellValue());
}
if (row.getCell(4) != null) {
data.setGender(row.getCell(4).getStringCellValue());
}
fillTable(data);
}
}
private void fillTable(Data data) {
dataTableView.getColumns().clear();
ObservableList<Data> observableDataList = FXCollections.observableArrayList();
observableDataList.add(data);
dataTableView.setItems(observableDataList);
}
Data Class:
public class Data {
private StringProperty account;
public void setAccount(String value) { accountProperty().set(value); }
public String getAccount() { return accountProperty().get(); }
public StringProperty accountProperty() {
if (account == null) account= new SimpleStringProperty(this,"account","");
return account;
}
private StringProperty idClient;
public void setIdClient(String idClient) { this.idClient.set(idClient); }
public String getIdClient() { return idClient.get(); }
public StringProperty idClientProperty() {
if(idClient==null) idClient= new SimpleStringProperty(this,"idClient","");
return idClient;
}
private StringProperty amount;
public void setAmount(String amount) { this.amount.set(amount); }
public String getAmount() { return amount.get(); }
public StringProperty amountProperty() {
if(amount==null) amount= new SimpleStringProperty(this,"amount","");
return amount;
}
private StringProperty name;
public void setName(String name) { this.name.set(name); }
public String getName() { return name.get(); }
public StringProperty nameProperty() {
if(name==null) name = new SimpleStringProperty(this,"name","");
return name;
}
private StringProperty gender;
public void setGender(String gender) { this.gender.set(gender);}
public String getGender() { return gender.get();}
public StringProperty genderProperty() {
if(name==null) gender= new SimpleStringProperty(this,"gender","");
return gender;
}
private StringProperty typeAccount;
public void setTypeAccount(String typeAccount) { this.typeAccount.set(typeAccount); }
public String getTypeAccount() { return typeAccount.get();}
public StringProperty typeAccountProperty() {
if(typeAccount==null) typeAccount= new SimpleStringProperty(this,"typeAccount","");
return typeAccount;
}
@Override
public String toString() {
return "Data{" +
", account=" + account +
", idClient=" + idClient +
", amount=" + amount +
", name=" + name +
", gender=" + gender +
", typeAccount=" + typeAccount +
'}';
}
}
ERROR
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.control.MenuItem.fire(MenuItem.java:462)
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1405)
at com.sun.javafx.scene.control.skin.ContextMenuContent$MenuItemContainer.lambda$createChildren$343(ContextMenuContent.java:1358)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:388)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 43 more
Caused by: java.io.IOException: Java heap space
at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:353)
at org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:316)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:234)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:200)
at sample.Controller.load(Controller.java:110)
... 53 more
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260)
at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2997)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3164)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:380)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:118)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3422)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1272)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1259)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:226)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:218)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.parseSheet(XSSFWorkbook.java:448)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:413)
at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:184)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:282)
at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:88)
at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:135)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:341)