# JFileChooser Problem - Verzweifelt



## DTD-Track (1. Nov 2007)

Hallo, 

ich habe gerade erst mit Java angefangen und wollte mir einen Uploader programmieren. Dieser sollte den JFileChooser verwenden. Leider gibt meine DosBox immer eine ganze Reihe von Fehlern aus, wenn ich das Applet über den Appletviewer aufrufe und den JFileChooser öffnen will. 

Ich hoffe ihr könnt mir helfen. Hier der Quellcode 
	
	
	
	





```
import java.awt.*;
import java.awt.event.*;

import javax.swing.JFileChooser;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JApplet;

	public class Uploader extends JApplet implements ActionListener, ListSelectionListener
	{
		//Definiere globale Variablen
		DefaultListModel lmdListModel;
		JList jliFileList;

		JButton cmdRemFile;
		JButton cmdAddFile;
		JButton cmdUpload;
				
		static final String sCmdRemFile = "Datei entfernen";
		static final String sCmdAddFile = "Datei hinzufügen";
		static final String sCmdUpload = "Dateien hochladen";

		//initialisiere Oberfläche
		public void init ()
		{
			setLayout(new BorderLayout()); 

			//Erstelle Listeninhalt
			lmdListModel = new DefaultListModel();
			
			for (int i = 0; i <= 10; i++)
			{
				lmdListModel.addElement ("Tobias Pohlen");
			}
			
			//Erstelle Liste und füge sie in ein Scrollpane
			jliFileList = new JList(lmdListModel);
			jliFileList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
			jliFileList.addListSelectionListener(this);
			jliFileList.setVisibleRowCount(5);
			JScrollPane jspFileList = new JScrollPane (jliFileList);
			
			//Erstelle Buttons
			cmdRemFile = new JButton (sCmdRemFile);
			cmdRemFile.setActionCommand(sCmdRemFile);
			cmdRemFile.addActionListener(this);
			cmdRemFile.setEnabled (false);
			
			cmdAddFile = new JButton (sCmdAddFile);
			cmdAddFile.setActionCommand(sCmdAddFile);
			cmdAddFile.addActionListener(this);

			cmdUpload = new JButton (sCmdUpload);
			cmdUpload.setActionCommand(sCmdUpload);
			cmdUpload.addActionListener(this);
		
			//Erstelle Panel zur Anordnung
			JPanel jplButtonPane = new JPanel ();
			jplButtonPane.setLayout(new BoxLayout(jplButtonPane, BoxLayout.LINE_AXIS));

			jplButtonPane.add(cmdRemFile);
			jplButtonPane.add(Box.createHorizontalStrut(10));
			jplButtonPane.add(cmdAddFile);
			//jplButtonPane.add (chooser);
			jplButtonPane.add(Box.createHorizontalStrut(10));
			jplButtonPane.add(new JSeparator(SwingConstants.VERTICAL));
			jplButtonPane.add(cmdUpload);
			jplButtonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
			
			add(jspFileList, BorderLayout.CENTER);
			add(jplButtonPane, BorderLayout.PAGE_END);

		}
		
		public void actionPerformed(ActionEvent evt) 
		{
			
			//Entferne Datei
			if (evt.getSource() == cmdRemFile)
			{
				if (jliFileList.getSelectedIndex() != -1)
				{
					//Entferne Listenpunkte
					while (jliFileList.getSelectedIndex() > -1)
					{
						lmdListModel.remove (jliFileList.getSelectedIndex());
					}
				}
			}

			//Datei hinzufügen
			if (evt.getSource () == cmdAddFile)
			{
				//Erstelle JFileChosser
				JFileChooser fc = new JFileChooser ();
			}
		}

		public void valueChanged(ListSelectionEvent e) 
		{
			if (e.getValueIsAdjusting() == false) 
			{
				
				//Wenn ein Listenpunkt angewählt wurde, zeige entfernen button an
				if (jliFileList.getSelectedIndex() != -1)
				{
					cmdRemFile.setEnabled (true);
				}
				else
				//Button deaktivieren
				{
					cmdRemFile.setEnabled (false);
				}
			}
		}
	}
```
Und hier die Fehlermeldungen http://www.skyart.de/errors.bmp

Vielen Dank


----------



## SlaterB (1. Nov 2007)

Applets dürfen nicht auf die Festplatte zugreifen, Ende im Gelände

es sei denn du willst dich ernsthaft mit höheren Sicherheitseinstellungen/ Signaturen befassen,
was mir sehr schwierig scheint, wenn du noch nicht mal das Problem kennst

(ich kenne das Problem seit Jahren, aber die Einstellungen nicht  )


----------



## Wildcard (1. Nov 2007)

Was ist bitte so schwer daran ein Applet zu signieren?  ???:L


----------



## L-ectron-X (1. Nov 2007)

Dazu gibts in der FAQ immer noch einen Beitrag.


----------



## Hollebolle (7. Nov 2007)

Hi, du mußt Dein Applet signieren. Dazu musst Du aus deiner Klasse zunächst ein Archiv machen (JAR-Datei). Diese signierst du dann wie folgt:

Ein Applet wird signiert, indem die jar-Datei mit einem Zertifikat unterschrieben wird. Um an ein gültiges Zertifikat zu kommen, gibt es drei Möglichkeiten:

   1. Sie erzeugen sich mit Hilfe des Tools keytool ein Zertifikat, lassen es von einer bekannten Certificate Authority unterschreiben und verwenden dieses Zertifikat dann zum Signieren.
      Dies ist der ''normale'' Weg, welcher dann gewählt werden sollte, wenn Sie keine Veränderungen beim Anwender an der Java-Datenbank für Zertifikate vornehmen können.
   2. Sie erzeugen sich mit Hilfe des Tools keytool ein Zertifikat, lassen es von einer unbekannten Certificate Authority unterschreiben, importieren das Zertifikat dieser CA in die Java-Datenbank für Zertifikate (damit wird die CA zu einer bekannten Certificate Authority) und verwenden dieses Zertifikat dann zum Signieren.
   3. Sie erzeugen sich mit Hilfe des Tools keytool ein Zertifikat. Dieses können Sie auch gleich zum Signieren Ihres Applets verwenden.

Die erste Möglichkeit ist notwendig, wenn Ihr Applet auf jedem beliebigen Rechner laufen soll, ohne dass in die Java-Datenbank für Zertifikate eingegriffen werden soll.

Die beiden anderen Möglichkeiten ähneln sich sehr, wir werden die dritte Variante ausführlicher vorstellen.

Ein neuer RSA-Key wird mit dem Tool keytool des JDKs wie folgt erzeugt:

[c:\]keytool -genkey -alias markus -keyalg RSA
Geben Sie das Keystore-Passwort ein:  xxxxxxxxxxxxxxxx
Wie lautet Ihr Vor- und Nachname?
 [Unknown]:  Markus Kopp
Wie lautet der Name Ihrer organisatorischen Einheit?
 [Unknown]:
Wie lautet der Name Ihrer Organisation?
 [Unknown]:
Wie lautet der Name Ihrer Stadt oder Gemeinde?
 [Unknown]:  Frankfurt am Main
Wie lautet der Name Ihres Bundeslandes oder Ihrer Provinz?
 [Unknown]:  Hessen
Wie lautet der Landescode (zwei Buchstaben) für diese Einheit?
 [Unknown]:  DE
Ist CN=Markus Kopp, OU=Unknown, O=Unknown, L=Frankfurt am Main,
ST=Hessen, C=DE richtig?

 [Nein]:  ja

Geben Sie das Passwort für  ein.
    (EINGABETASTE, wenn Passwort dasselbe wie für Keystore):

Hiermit haben wir ein neues Zertifikat mit dem Namen ''markus'' erstellt, welches in die Java-Datenbank für die Zertifikate geschrieben wurde.

Mit diesem Zertifikat können Sie bereits jar-Dateien signieren:

[c:\]jarsigner.exe meinapplet.jar markus
Enter Passphrase for keystore: xxxxxxxxxxxxxxxx
Enter key password for markus: yyyyyyyyyy

In der HTML Datei gibst Du dann folgendes an:

```
<applet code="Upload.class" archive="Upload.jar" width="800" height="400"> etc.
```


----------

