I'm struggling to learn java, and I'm attempting to understand how calling functions from one class to another works. I have two classes, that I'll post below. I'm seeing a "Non-static method cannot be referenced from a static context" when I call H2db.addItems() in the ToDo class, and when I call ToDo.menu() in the H2db class. Googling has revealed that it has something to do with having an instance(?) but I'm not sure what that means.
Class ToDo:
package com.company;
import java.io.*;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.Scanner;
public class ToDo {
//BufferedReader inputread = new BufferedReader(new InputStreamReader(System.in));
Scanner inputread = new Scanner(System.in);
ArrayList<String> toDoList = new ArrayList<String>();
public void menu() {
clearConsole();
System.out.println("Welcome to the To-Do program.");
System.out.println();
System.out.println();
System.out.println("Please select an option from the following menu, using the number.:");
System.out.println("1- View To-Do List");
System.out.println("2- Add Item To List");
System.out.println("3- Remove Item From List");
System.out.println("4- Save List");
System.out.println("5- Load List");
int userinput = inputread.nextInt();
switch (userinput) {
case 1:
clearConsole();
displayList(true);
menu();
break;
case 2:
clearConsole();
H2db.addItems();
break;
case 3:
clearConsole();
deleteItem();
break;
case 4:
clearConsole();
try {
saveList();
}
catch(IOException e){
return;
};
case 5:
clearConsole();
try {
loadList();
}
catch(IOException e){
return;
};
}
}
public void clearConsole() {
for (int i = 0; i < 25; i++) {
System.out.println();
}
}
public void addItem() {
System.out.println("Please type the item to add to the To-Do List");
//The skip gets over the leftover newline character
inputread.skip("\n");
String newItem = inputread.nextLine();
toDoList.add(newItem);
System.out.println("Your item has been added! Type any key and press Enter to continue");
String discardMe = inputread.next();
menu();
}
public void displayList(boolean finish) {
if (toDoList.isEmpty()) {
System.out.println("Add an activity.");
} else {
for (String listItem: toDoList) {
System.out.println(listItem);
}
}
if (finish) {
System.out.println();
System.out.println("This is your list. Type any key and press Enter to continue");
String discardMe = inputread.next();
}
}
public void deleteItem() {
if (toDoList.isEmpty()) {
System.out.println("For fuck's sake, add an activity.");
} else {
System.out.println("Please choose the number of the line you want to delete:");
displayList(false);
int userinput = inputread.nextInt();
int listPos = userinput - 1;
toDoList.remove(listPos);
System.out.println("That item has been deleted. Type any key and press Enter to continue.");
String discardMe = inputread.next();
}
menu();
}
public void saveList() throws IOException {
System.out.println("Saving list...");
PrintWriter writer = new PrintWriter("list.txt", "UTF-8");
for (String listItem : toDoList) {
writer.println(listItem);
}
writer.close();
System.out.println("List saved! Type any key and press Enter to continue");
String discardMe = inputread.next();
menu();
}
public void loadList() throws IOException {
System.out.println("Loading list...");
File loadFile = new File("list.txt");
Scanner scanner = new Scanner(loadFile);
while (scanner.hasNext()) {
String item = scanner.nextLine();
toDoList.add(item);
}
System.out.println("List loaded! Type any key and press Enter to continue");
String discardMe = inputread.next();
menu();
scanner.close();
}
}
Class H2db:
package com.company;
import java.sql.*;
import java.util.ArrayList;
import java.util.Scanner;
public class H2db {
Scanner inputread = new Scanner(System.in);
ArrayList<String> toDoList = new ArrayList<String>();
public void connect(){
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/toDo", "user", "");
Statement stat = conn.createStatement();
stat.execute("CREATE TABLE IF NOT EXIST 'todo'(id int NOT NULL AUTO_INCREMENT primary key, item varchar(255))");
}
catch( Exception e) {
System.out.println(e.getMessage());
}
}
public void addItems() {
PreparedStatement addstat;
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/toDo", "user", "");
System.out.println("Please type the item to add to the To-Do List");
inputread.skip("\n");
String newItem = inputread.nextLine();
addstat = conn.prepareStatement("INSERT INTO toDo (item)" +"VALUES (?)");
addstat.setString(1, newItem);
addstat.executeUpdate();
System.out.println("Your item has been added! Type any key and press Enter to continue");
String discardMe = inputread.next();
ToDo.menu();
}
catch( Exception e) {
System.out.println(e.getMessage());
}
}
}
Any help would be awesome, thanks. I know it's just a gap in knowledge, but I can't seem to grasp whatever this concept is called.