Pregunta

Hola a todos, estoy trabajando en una utilidad hexadecimal hecha en Java. Tengo algunos problemas con el escáner que estaría usando antes de la lógica hexagonal/ASCII.

En este momento tengo la lógica y algunas otras cosas excluidas por razones de depuración, pero si alguien sabe lo que está pasando, ¡me gustaría saber! Sugerencia muy apreciada.

package filedumputility;

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class FileDump extends JFrame {

public FileDump() throws Exception{
    setTitle("File Dump Utility");
    add(new DumpPanel());
}

//Main method
public static void main(String[] args) throws Exception {
    FileDump frame = new FileDump();
    frame.setSize(500, 250);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setVisible(true);
}
//Class to creaste components
class DumpPanel extends JPanel {
    private JFileChooser fileChooser = new JFileChooser();
    private JTextArea dumpArea = new JTextArea(11, 20);
    private JTextField fileName = new JTextField(16);
    private JButton newButton = new JButton("New File");
    private JButton clearButton = new JButton("Clear");
    private JButton dumpButton = new JButton("Dump File");
    private JScrollPane scrollPane = new JScrollPane(dumpArea);
    private JPanel p = new JPanel();
    private Scanner input;

    //Class to add components and read the file
    public DumpPanel() throws Exception {
        p.setLayout(new FlowLayout());
        setLayout(new BorderLayout());

        add(p, BorderLayout.NORTH);
        p.add(fileName);
        p.add(dumpButton);
        p.add(newButton);
        p.add(clearButton);
        add(scrollPane, BorderLayout.SOUTH);

        dumpArea.setEditable(false);
        fileName.setEditable(false);

        //Create event for the new file button
        newButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){                    

                if(fileChooser.showOpenDialog(null)
                        == JFileChooser.APPROVE_OPTION) {

                    //Get the file
                    java.io.File file = fileChooser.getSelectedFile();

                //Set file name bar to the selected file
                fileName.setText(file.getName());
                }
            }
        });

        dumpButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(fileChooser.showOpenDialog(null)
                        == JFileChooser.APPROVE_OPTION) {

                    //Get the file
                    java.io.File file = fileChooser.getSelectedFile();
                    //Create scanner
                    Scanner input = new Scanner(file);

                }
            }
        });

        clearButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                dumpArea.setText(" ");
                fileName.setText(" ");
            }
        });
    }
}
}
¿Fue útil?

Solución

Su único problema que puedo ver es que el constructor del escáner Lanza FileNotFoundException; Por lo tanto, debe encerrarlo en un bloque de Try/Catch.

Debería verse algo así (solo para empezar):

dumpButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if(fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

            //Get the file
            java.io.File file = fileChooser.getSelectedFile();
            //Create scanner
            try {
                Scanner input = new Scanner(file);
            } catch (FileNotFoundException ex) {
                System.err.println("Error opening " + file.getName());
            }
        }
    }
});

También puede encontrar el Tutorial de excepciones de Java útil.

Otros consejos

Para obtener su ejemplo para compilar, puede envolver el new Scanner Línea en un intento de captura como esta:

            Scanner input = null;
            try {
                input = new Scanner(file);
            } catch(FileNotFoundException ex) {
                // handle this condition appropriately
            }

Una vez que haga eso, puede proceder a procesar las líneas del archivo de la forma en que pretendía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top