errori dello scanner in ActionListener / classe actionPerformed
-
23-09-2019 - |
Domanda
Ciao a tutti, sto lavorando su un programma di utilità esadecimale realizzato in Java. Sto avendo alcuni problemi con lo scanner sarei usando prima che il / logica esadecimale ascii.
In questo momento ho la logica e un paio di altre cose esclusi per il debug di ragioni, ma se qualcuno sa cosa sta succedendo mi piacerebbe sapere! Suggerimenti molto apprezzato.
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(" ");
}
});
}
}
}
Soluzione
Il tuo unico problema che posso vedere è che il costruttore dello scanner getta FileNotFoundException ; Pertanto, è necessario racchiuderlo in un blocco try / catch.
Dovrebbe essere qualcosa di simile (tanto per cominciare):
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());
}
}
}
});
Si potrebbe anche trovare le eccezioni Java Tutorial utile.
Altri suggerimenti
Per ottenere il vostro esempio di compilazione, si può avvolgere la linea new Scanner
in un tentativo di cattura in questo modo:
Scanner input = null;
try {
input = new Scanner(file);
} catch(FileNotFoundException ex) {
// handle this condition appropriately
}
Una volta fatto questo, allora si può procedere alla elaborazione delle linee del file come si intendeva.