We need to make something of a lexical analyzer, and I have had some trouble with a particular function of mine, useLoad, or more accurately, what happens in Main after useLoad is used.
I figured out that that was because...for some reason, buffer=keyboard.nextLine() is throwing the error, because it's not getting more input from the keyboard for some reason. I thought that .nextLine() should force it to get more input from the user. And I don't know why it's throwing that exception specifically after this one particular method. It can do other methods just fine and not lose its ability to read. Is it because I have a variable called keyboard in another object and closed it? That seems doubtful. Just tried changing the name. Didn't make a difference.
Variables used but not declared in the below code: Keywords[0] is the String "load ". initial = the scanner string that's passed in to the function. offset = a counter variable, to see how far in to the line we've read.
The useLoad function (which is what I think is messing up somehow), is at the bottom, but I included everything it runs through (with each method separated by a horizontal rule), in chronological order, just in case I'm just not seeing what's going on.
public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in); //the scanner for keyboard
        int i = 0;
        String buffer ="";
        boolean loopControl == true;
        SymbolTable mySym = new SymbolTable();
        System.out.println("READY FOR INPUT\n");
        while (loopControl == true){
            //read in the line
            buffer = "";
            buffer = keyboard.nextLine();
            if(!mySym.checkStop(buffer)){ //if we didn't stop
                mySym.primary(buffer);
            }
            else{//if we did stop
                closeLoop();
            }
            if (i >= 55){
                loopControl = false;
                System.out.println(("You have gone over the limit ("+i+" lines) per execution. Please continue by running this program again.").toUpperCase());
                //just a safety precaution...you know... in case closeLoop doesn't work
            }
            i++;
        }
        keyboard.close();
    }
    if(initial.substring(0, Keywords[0].length()).equals(Keywords[0])){ //Load
        //if this is working as expected, then we simply need to do what the keyword says to do.
        offset += Keywords[0].length(); //we have moved this much deeper in to the line
        useLoad(offset, initial);
        offset = 0; //just make sure, once we are done with the line, we start back at the start of the next line.
        return; //we found what we were looking for, get out.
    }
private void useLoad(int offsetIn, String readIn) {
        double doubIn = 0;
        //now get the value of the 
        Scanner keyboard = new Scanner(System.in); //the scanner for keyboard
            System.out.println("\nENTER VALUE FOR " + readIn.toUpperCase());
             doubIn = keyboard.nextDouble();    
        keyboard.close();
        variables.create(readIn.substring(offsetIn), doubIn);
    }