Fehler bei .toArray

alexl.

Mitglied
Hallo,

ich versuche gerade eine ArrayList in einen Array zu verändern. Ich bekomme allerdings jedes mal, wenn es versuche (durch Knopfdruck), einen Fehler.

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayStoreException
    at java.lang.System.arraycopy(Native Method)
    at java.util.ArrayList.toArray(Unknown Source)
    at Gui$5.actionPerformed(Gui.java:128)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


Hier ist mein Programm:

Java:
import java.awt.BorderLayout;


public class Gui extends JFrame {

    private JPanel contentPane;
    private JTextField tfDateiName;
    private PrintWriter pWriter;
    private JLabel lbNachrichtStart;
    private JTextArea taAusgabe;
    private ArrayList<File> arrayDateiNamen = new ArrayList<>();
    private File folder = new File("Vokabeln\\");
   

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Gui frame = new Gui();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Gui() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 560, 400);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new CardLayout(0, 0));
       
        JPanel panelStart = new JPanel();
        contentPane.add(panelStart, "name_118404362997596");
        panelStart.setLayout(null);
       
        tfDateiName = new JTextField();
        tfDateiName.setBounds(10, 45, 140, 20);
        panelStart.add(tfDateiName);
        tfDateiName.setColumns(10);
       
        JLabel lbNeueDatei = new JLabel("Neue Vokabeldatei erstellen");
        lbNeueDatei.setBounds(10, 20, 163, 14);
        panelStart.add(lbNeueDatei);
       
        JButton btDateiErstellen = new JButton("Datei erstellen");
        btDateiErstellen.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try {
                    pWriter = new PrintWriter(new BufferedWriter(new FileWriter("Vokabeln\\"+tfDateiName.getText(),true)),true);
                   
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    lbNachrichtStart.setText("Bitte etwas in das Textfeld eingeben!");
                }
            }
        });
        btDateiErstellen.setBackground(Color.WHITE);
        btDateiErstellen.setBounds(185, 43, 140, 25);
        panelStart.add(btDateiErstellen);
       
        lbNachrichtStart = new JLabel("");
        lbNachrichtStart.setBounds(10, 80, 250, 14);
        panelStart.add(lbNachrichtStart);
       
        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                arrayDateiNamen.add(folder);
            }
        });
        btnNewButton.setBounds(353, 44, 89, 23);
        panelStart.add(btnNewButton);
       
        JButton btnArray = new JButton("Array");
        btnArray.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                for(File file : folder.listFiles()){
                    for (int i = 0; i < arrayDateiNamen.size(); i++) {
                        folder=arrayDateiNamen.get(i);
                        taAusgabe.append(file.getName());
                        taAusgabe.append("\n");
                    }
                }
            }
        });
        btnArray.setBounds(353, 89, 89, 23);
        panelStart.add(btnArray);
       
        taAusgabe = new JTextArea();
        taAusgabe.setBounds(296, 123, 228, 217);
        panelStart.add(taAusgabe);
       
        JButton btnArraylistToArray = new JButton("ArrayList to Array");
        btnArraylistToArray.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String[] arrayEins  = arrayDateiNamen.toArray(new String[arrayDateiNamen.size()]);
            }
        });
        btnArraylistToArray.setBounds(61, 239, 133, 23);
        panelStart.add(btnArraylistToArray);
       
       
        JPanel panelVokabelnEingeben = new JPanel();
        contentPane.add(panelVokabelnEingeben, "name_118406666671530");
    }
}



Vielen Dank für jede Hilfe!
 
Du versuchst ja auch eine List<File> in ein String[] zu wandeln.
Aus der Docu kann man entnehmen, wann die ArrayStoreException geworfen wird:
If the runtime type of the specified array is not a supertype of the runtime type of every element in this list.

Was soll denn am Ende in dem String-Array drin stehen? Die Namen der Dateien?
 
Stimmt, jetzt wo du es sagst, macht das durchaus Sinn...
Ja, im String-Array sollen die Namen der Dateien stehen. Gibt es eine Möglichkeit das umzusetzen?
 
Naja mit Streams ist das ein einzeiler:
Java:
String[] fileNames = fileList.stream().map(File::getName).toArray();

Kannst natürlich auch händisch über die Liste iterieren und dem Array die Namen hinzufügen.
 

Zurück
Oben