Scanner файла в jFrame - Java
Формулировка задачи:
Подскажите пожалуйста, как можно считать данные из файла в массив? Делал тоже самое не в jFrame, а в "консоли", то все отлично работало. Буду очень сильно благодарен за ответ!
Делал вот так:
Это все добавил в кнопку. Но выдало ошибки:
Exception in thread "AWT-EventQueue-0" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at NewJFrame.jButton5ActionPerformed(NewJFrame.java:295)
at NewJFrame.access$300(NewJFrame.java:31)
at NewJFrame$5.actionPerformed(NewJFrame.java:234)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
int[][] arr=new int[5][5];
Scanner sc;
sc = new Scanner("E:\\test.txt");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
arr[i][j] = sc.nextInt();
}
}Решение задачи: «Scanner файла в jFrame»
textual
Листинг программы
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
public class FrameArray extends JFrame {
JTextField jTextField;
JButton jButton;
JTextArea jTextArea;
int[][] a;
public FrameArray() throws HeadlessException {
jTextField = new JTextField("D:\\test.txt");
jTextField.setPreferredSize(new Dimension(250, 20));
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new Dimension(400, 200));
jButton = new JButton("Load ");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
File file = new File(jTextField.getText());
if (!file.exists()) {
JOptionPane.showMessageDialog(null, " File not Found! ");
return;
}
if(!loadArray(file)) {
JOptionPane.showMessageDialog(null, " File not Found! ");
return;
}
loadText();
// JOptionPane.showMessageDialog(null, "Load done! ");
}
});
JPanel jPanel = new JPanel(new FlowLayout());
jPanel.add(jTextField);
jPanel.add(jButton);
add(jPanel, BorderLayout.NORTH);
add(jTextArea);
}
private boolean loadArray(File file) {
Scanner in = null;
try {
in = new Scanner(new FileInputStream(file));
if (!in.hasNextInt()) {
JOptionPane.showMessageDialog(null, " wrong format! ");
}
int n = in.nextInt(); // rows
if (!in.hasNextInt()) {
JOptionPane.showMessageDialog(null, " wrong format! ");
}
int m = in.nextInt(); // columns
a = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!in.hasNextInt()) {
JOptionPane.showMessageDialog(null, " wrong format! ");
return false;
}
a[i][j] = in.nextInt();
}
}
in.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
return true;
}
private void loadText() {
jTextArea.setText("array a["+a.length+"]["+a[0].length+"] values:\n");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
jTextArea.append("a[" + i + "][" + j + "]="+a[i][j]+"\n");
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new FrameArray();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(frame.getParent());
frame.setSize(800, 600);
frame.setVisible(true);
}
});
}
}