Applet Acces Probleme und NullPointerException

TheBodo

Erfahrenes Mitglied
Halli Hallo,

ich habe, seit langem, mal wieder ein Problem!
Ich hab zwar schon fast alles in Java gemacht, nur leider nich im Applet!

Meine Aufgabe:
Ein JApplet mit JFileChooser um Dateien auf einen FTP-Server hochzuladen.

Das Tolle: Es funktioniert... unter Eclipse im AppletViewer (also Test).

Aber sobald ich das Ding in einem HTML-Dokument aufrufe kommt folgendes:

Code:
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at java.io.Win32FileSystem.getUserPath(Unknown Source)
	at java.io.Win32FileSystem.resolve(Unknown Source)
	at java.io.File.getAbsolutePath(Unknown Source)
	at javax.swing.filechooser.WindowsFileSystemView.isFloppyDrive(Unknown Source)
	at javax.swing.plaf.basic.BasicFileChooserUI$BasicFileView.getIcon(Unknown Source)
	at javax.swing.JFileChooser.getIcon(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxRenderer.getListCellRendererComponent(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
	at javax.swing.JList.setSelectedIndex(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup.setListSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup.access$300(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup$Handler.itemStateChanged(Unknown Source)
	at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
	at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
	at javax.swing.JComboBox.contentsChanged(Unknown Source)
	at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.setSelectedItem(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.access$900(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.access$1200(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(Unknown Source)
	at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
	at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
	at java.awt.Component.firePropertyChange(Unknown Source)
	at javax.swing.JFileChooser.setCurrentDirectory(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at main.SWBSApplet.<init>(SWBSApplet.java:54)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Ausnahme: java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at java.io.Win32FileSystem.getUserPath(Unknown Source)
	at java.io.Win32FileSystem.resolve(Unknown Source)
	at java.io.File.getAbsolutePath(Unknown Source)
	at javax.swing.filechooser.WindowsFileSystemView.isFloppyDrive(Unknown Source)
	at javax.swing.plaf.basic.BasicFileChooserUI$BasicFileView.getIcon(Unknown Source)
	at javax.swing.JFileChooser.getIcon(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxRenderer.getListCellRendererComponent(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
	at javax.swing.plaf.basic.BasicListUI$Handler.valueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.changeSelection(Unknown Source)
	at javax.swing.DefaultListSelectionModel.setSelectionInterval(Unknown Source)
	at javax.swing.JList.setSelectedIndex(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup.setListSelection(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup.access$300(Unknown Source)
	at javax.swing.plaf.basic.BasicComboPopup$Handler.itemStateChanged(Unknown Source)
	at javax.swing.JComboBox.fireItemStateChanged(Unknown Source)
	at javax.swing.JComboBox.selectedItemChanged(Unknown Source)
	at javax.swing.JComboBox.contentsChanged(Unknown Source)
	at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.setSelectedItem(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.access$900(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.access$1200(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(Unknown Source)
	at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
	at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
	at java.awt.Component.firePropertyChange(Unknown Source)
	at javax.swing.JFileChooser.setCurrentDirectory(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at main.SWBSApplet.<init>(SWBSApplet.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Ausnahme: java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
Exception in thread "AWT-EventQueue-4" java.lang.NullPointerException
	at java.awt.LightweightDispatcher$3.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(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)
Exception in thread "AWT-EventQueue-4" java.lang.NullPointerException
	at java.awt.LightweightDispatcher$3.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(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)

Das erste beudetet wohl, dass das Applet mehr Rechte braucht, ich hab mal :google: bemüht, aber das einzige was ich da gefunden habe, waren Codeschnipsel die ähnliche Problem umgehen, die aber leider auf mein Problem nicht anwendbar sind.

Mein erste Frage also, wie geb ich dem Applet die Rechte auf die Dateien des ausführenden Users zuzugreifen?

Meine zweite Frage bezieht sich dann natürlich auf die NullPointerException,
ich hoffe aber dass sich die durch das AccesDenied ergibt, und danach auflöst.

Hier einmal mein Code. vlt hilfts ja:
Java:
package main;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

public class SWBSApplet extends JApplet implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -950010330883960337L;
	private JButton chooseFiles = new JButton("Bilder auswählen");
	private JButton upload = new JButton("Bilder hochladen");
	private JList list = new JList();
	private JTextField name = new JTextField("Bitte geben Sie hier Ihren Namen ein.");
	private JFileChooser fileChooser = new JFileChooser();
	private File[] files;
	private JProgressBar pbar = new JProgressBar();

	public void init() {
		this.setSize(500, 300);
		pbar.setBackground(new Color(150, 200, 230));
		pbar.setForeground(new Color(100, 255, 100));
		this.setLayout(new BorderLayout());
		this.add(chooseFiles, BorderLayout.NORTH);
		JScrollPane sp = new JScrollPane(list);
		sp.setPreferredSize(new Dimension(200, 400));
		this.add(sp);
		JPanel bp = new JPanel();
		bp.setLayout(new GridLayout(3, 1, 2, 2));
		bp.add(name);
		bp.add(upload);
		bp.add(pbar);
		this.add(bp, BorderLayout.SOUTH);
		
		upload.setEnabled(false);
		pbar.setStringPainted(true);
		
		fileChooser.setMultiSelectionEnabled(true);
		
		chooseFiles.addActionListener(this);
		upload.addActionListener(this);
	}


	public void actionPerformed(ActionEvent e) {
		Object source = e.getSource();
		
		if (source == chooseFiles) {
			fileChooser.showOpenDialog(this);
			files = fileChooser.getSelectedFiles();
			list.setListData(files);
			if (files.length > 0)
				upload.setEnabled(true);
		}
		
		if (source == upload) {
			name.setEditable(false);
			upload.setEnabled(false);
			chooseFiles.setEnabled(false);
			new Thread() {
				public void run() {
					sendFiles();
				}
			}.start();
		}
	}
	
	private void sendFiles() {
		
		FTPClient client = new FTPClient();
		try {
			client.connect("www.test.de", 21);
			client.login( "user", "pw");
			client.changeWorkingDirectory("test");
			FTPFile[] ftpfiles = client.listFiles();
			boolean found = false;
			for(int i = 0; i < ftpfiles.length && !found; i++) {
				found = ftpfiles[i].getName() == name.getText();
			}
			if (!found) {
				client.makeDirectory(name.getText());
			}
			client.changeWorkingDirectory(client.printWorkingDirectory() + "/" + name.getText());
			pbar.setMaximum(files.length);
			for(int i = 0; i < files.length; i++) {
				client.appendFile(files[i].getName(), new FileInputStream(files[i]));
				pbar.setValue(i + 1);
				pbar.setString((int) ((float) pbar.getValue() / (float) files.length * 100) + "%" );
			}
			upload.setText("Alle Bilder hochgeladen - Bitte schließen Sie diese Seite");
			client.disconnect();
			
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	
}

Danke für eure Antworten!
 

Neue Beiträge

Zurück