import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.io.*; import java.util.Scanner; public class GridPanel extends JPanel { double x1, y1; final int gridSize = 100; final int draw = 0; final int fill = 1; final int pad = 40; int DELAY = 1; Engine eng; JButton next, start, stop, clear; JTextField run; private JFileChooser chooser; private Scanner scan; int iterations; private Timer timer; int counter = 0; private JComboBox combobox; static final long serialVersionUID = 01; public GridPanel() { eng = new Engine(gridSize, gridSize); next = new JButton("Next"); next.addActionListener(new GridPanel.ButtonListener()); start = new JButton("Start"); start.addActionListener (new GridPanel.ButtonListener()); stop = new JButton("Stop"); stop.addActionListener (new GridPanel.ButtonListener()); clear = new JButton("Clear"); clear.addActionListener (new GridPanel.ButtonListener()); run = new JTextField("Run Count"); add(next); add(start); add(stop); add(run); add(clear); timer = new Timer(DELAY, new LoopListener()); // File Operation Combo Box String[] options = {"File...","Save","Open","Quit"}; combobox = new JComboBox (options); combobox.addActionListener((new ComboListener())); add(combobox); } public void paintComponent (Graphics a) { super.paintComponent(a); Graphics2D d2 = (Graphics2D)a; d2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); double w = getWidth(); double h = getHeight(); x1 = (w - 2 * pad) / gridSize; y1 = (h - 2 * pad) / gridSize; // Draw Rows double x2 = pad, y2 = pad, x3 = w - pad, y3 = h - pad; for (int m = 0; m <= gridSize; m++) { d2.draw(new Line2D.Double (x2, y2, x3, y2)); y2 += y1; } // Draw Columns y2 = pad; for (int m = 0; m <= gridSize; m++) { d2.draw(new Line2D.Double(x2,y2,x2,y3)); x2 += x1; } // Fill Cells when Clicked d2.setPaint(Color.blue); for (int row = 0; row < eng.returnRowCount(); row++) { for (int col = 0; col < eng.returnColumnCount(row); col++) { if (eng.getCell(row, col) == true) { x2 = pad + col * x1 + 1; y2 = pad + row * y1 + 1; d2.fill(new Rectangle2D.Double(x2, y2, x1-1, y1-1)); } } } } public void changeCellColor(int row, int column) { if (eng.getCell(row, column) == false) eng.setCell(row, column, true); else eng.setCell(row, column, false); //System.out.println(row + " " + column); repaint(); } private class ButtonListener implements ActionListener { public void actionPerformed (ActionEvent event) { Object source = event.getSource(); if (source == next) { eng.nextStep(); repaint(); } if (source == start) { timer.start(); } if (source == stop) { timer.stop(); counter = 0; } if (source == clear) { for (int i=0; i " ); System.exit(0); } BufferedWriter bw = new BufferedWriter(fw); PrintWriter outFile = new PrintWriter(bw); for (int i = 0 ; i < eng.returnRowCount() ; i++) { for (int j = 0 ; j < eng.returnColumnCount(i) ; j++) outFile.print(booleanToString(eng.getCell(i, j)) + " ") ; outFile.println(); } outFile.close(); } private void openFile(File file) //throws IOException { try { scan = new Scanner(file); } catch (IOException e) { System.exit(0); } String s1; s1 = scan.nextLine(); String tmp[] = s1.split(" "); for (int i=0; i < eng.returnRowCount(); i++) { s1 = scan.nextLine(); tmp[] = s1.split(" "); for (int j=0; j < eng.returnColumnCount(0); j++) { eng.setCell(i, j, stringToBoolean(tmp[j])); System.out.println (i + " " + j); } } } public static final boolean stringToBoolean(String str) { if (str.equals("0")) { return false; } //if it's non false, it's true by definition else return true; } public static final int booleanToString(boolean bool) { if (bool) { int a = 1; return a; } else { int a = 0; return a; } } } Upon running this code to output, I get a 100x100 grid (0-99 x 0-99), which is correct. However, when trying to take that back in as input, it processes up through row #98, column 99, and then throws this exception: 98 99 <--- this being the output generated by nested for loops to show which cell the loop is handling. Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1471) at GridPanel.openFile(GridPanel.java:252) at GridPanel.access$700(GridPanel.java:8) at GridPanel$ComboListener.actionPerformed(GridPanel.java:196) at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1197) at javax.swing.JComboBox.setSelectedItem(JComboBox.java:561) at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:597) at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:808) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:232) at java.awt.Component.processMouseEvent(Component.java:5554) at javax.swing.JComponent.processMouseEvent(JComponent.java:3126) at apple.laf.AquaComboBoxUI$AquaComboPopup$1.processMouseEvent(AquaComboBoxUI.java:443) at java.awt.Component.processEvent(Component.java:5319) at java.awt.Container.processEvent(Container.java:2010) at java.awt.Component.dispatchEventImpl(Component.java:4021) at java.awt.Container.dispatchEventImpl(Container.java:2068) at java.awt.Component.dispatchEvent(Component.java:3869) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866) at java.awt.Container.dispatchEventImpl(Container.java:2054) at java.awt.Window.dispatchEventImpl(Window.java:1774) at java.awt.Component.dispatchEvent(Component.java:3869) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)