# Verzeichnisauswahl



## Alex02 (26. Juni 2006)

Hallo,

ich möchte über ein popupp - Fenster (Windowslike) ein Verzeichnis auswählen und dieses als String zurückgeben.

Kann mir da jemand sagen, wie das geht?

Gruß

Alex


----------



## BLOEBAUM (27. Juni 2006)

Hallo Alex,

mit folgendem Code kannst du entweder ein Verzeichnis oder Dateien in einem Verzeichnis auswählen:

```
import java.awt.DisplayMode;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class MultiDateiauswahl {
	
	Display display = new Display();

	Shell shell = new Shell(display);

// the label used to display selected dir/file.
	Label label;

	Button buttonSelectDir;

	Button buttonSelectFile;

	String selectedDir;

	String fileFilterPath = "i:/daten/scratch";

	public MultiDateiauswahl() {
		label = new Label(shell, SWT.BORDER | SWT.WRAP);
		label.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
		label.setText("Select a dir/file by clicking the buttons below.");
		buttonSelectDir = new Button(shell, SWT.PUSH);
		buttonSelectDir.setText("Ende");
		buttonSelectDir.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {

				display.dispose();
			}
		});
		buttonSelectFile = new Button(shell, SWT.PUSH);
		buttonSelectFile.setText("Auswahl Datei(en)");
		buttonSelectFile.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {
				FileDialog fileDialog = new FileDialog(shell, SWT.MULTI);

				fileDialog.setFilterPath(fileFilterPath);
				fileDialog.setFilterExtensions(new String[] { "*.*", "*.csv",
						"*.txt", });
				fileDialog.setFilterNames(new String[] { "Any", "csv DAtei",
						"Textdatei" });
				String firstFile = fileDialog.open();

				if (firstFile != null) {
					fileFilterPath = fileDialog.getFilterPath();
					String[] selectedFiles = fileDialog.getFileNames();
					StringBuffer sb = new StringBuffer(
							"Selected files under dir "
									+ fileDialog.getFilterPath() + ": \n");
					
//					Ausgewählten Pfad in der Datenklasse eintragen 				
					Datenklasse.getInstance().setPfadname(fileDialog.getFilterPath());
//					Ausgewählten Pfad aus der Datenklasse anzeigen 					
					System.out.println("Pfad:     " +Datenklasse.getInstance().getPfadname());
//				Übergabe aller Dateien
					Datenklasse.getInstance().setDateitabelle(selectedFiles);
					
					for (int i = 0; i < selectedFiles.length; i++) 
					{
						sb.append(selectedFiles[i] + "\n");
						
//					Ausgewählte Datei in der Datenklasse eintragen - wenn mehrere ausgewählt wurden gewinnt das letzte						
						Datenklasse.getInstance().setDateiname(selectedFiles[i]);
						System.out.println("Datei: " +Datenklasse.getInstance().getDateiname());
					}
					
					label.setText(sb.toString());
				}
			}
		});
		label.setBounds(20, 25, 300, 600);
//		buttonSelectDir.setBounds(0, 65, 200, 30);
//		buttonSelectFile.setBounds(200, 65, 200, 30);
		buttonSelectDir.setBounds(400, 80, 150, 30);
		buttonSelectFile.setBounds(400, 160, 150, 30);
		
		shell.pack();
		shell.open();
		//textUser.forceFocus();

		// Set up the event loop.
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				// If no more entries in event queue
				display.sleep();
			}
		}
		display.dispose();
	}

	public static void main(String[] args) {
		new MultiDateiauswahl();
	}
}


Hier dazu die erforderliche Datenklasse:

//********************************************************
//Datenklasse zur Überbage der gefundenen Werte Start
//********************************************************
	
public class Datenklasse {

private static Datenklasse _instance;

public synchronized static Datenklasse getInstance() {
	if (_instance == null) {
		_instance = new Datenklasse(pfadname, dateiname, sDateitabelle);
	}

	return _instance;
}

//		  		Konstruktor Datenklasse legt einen Satz der Klasse 		
//		  		Datenklasse an.
public Datenklasse(String k, String b, String[] c) {
	pfadname = k;
	dateiname = b;
	sDateitabelle = c;
}

//		  	Methode Klassensatz neu anlegen
public void satzNeu(String k, String b, String[] c) {
	pfadname = k;
	dateiname = b;
	sDateitabelle = c;
}

//		  	Methode getpfadname liefert den Schlüsselwert des aktuellen
//		  Satzes der Klasse
public String getPfadname() {
	return pfadname;
}

//		  	Methode getdateiname liefert die Bezeichnung des aktuellen
//		  	Satzes der Klasse
public String getDateiname() {
	return dateiname;
}

public String[] getDateitabelle() {
	return sDateitabelle;
}	

//		  	In der Klasse Datenklasse wird der aktuelle Wert des 
//		  	Feldes pfadname auf den an die Methode übergebenen Wert gesetzt.
public void setPfadname(String key) {
	pfadname = key;
}

//		  Dateinamen setzten  
public void setDateiname(String bez) {
	dateiname = bez;
}

//		  Dateinamen setzten  
public void setDateitabelle(String[] pDateitabelle) {
	sDateitabelle = pDateitabelle;
}

//		  	Die Klasse besteht aus diesem beiden Feldern
private static String pfadname;

private static String dateiname;
private static String sDateitabelle[];

}
```


Gruß

Harald


----------



## Alex02 (27. Juni 2006)

Hallo Harald,

danke für die Antwort.

Noch ne kleine Frage:

Welches Jar-File gehört zu

org.eclipse .......... 

Gruß

Alex


----------



## Alex02 (27. Juni 2006)

Ich hab das etwas anders gelöst:

JFileChooser jfchoos = new JFileChooser ();
				jfchoos.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		JFrame jframe = new JFrame ();
		Container cpane = jframe.getContentPane();
		cpane.add(jfchoos);

		cpane.setLayout(new FlowLayout());
		jframe.setSize(550,400);

		jframe.show();

jetzt hatte ich eigentlich vor, mir den Pfad als String zurückzugeben, aber irgendwie wills nicht ganz 

Gruß

Alex


----------



## BLOEBAUM (27. Juni 2006)

Alex02 hat gesagt.:
			
		

> Hallo Harald,
> 
> danke für die Antwort.
> 
> ...



Jar File: org.eclipse.swt.win32.win32.x86_3.1.1.jar


----------



## Alex02 (27. Juni 2006)

Hallo,

danke für Deine Hilfe.

Jetzt noch mal eine Frage. ist es möglich einen JFileChooser auf dem Server zu benutzen.

Ich bekomm immer eine Fehlermeldung, wenn ich Jframes aufrufen will!

(System: Windows)

Gruß

Alex


----------



## flashray (27. Juni 2006)

Wie lautet die Fehlermeldung?

Vg Erdal


----------



## Alex02 (28. Juni 2006)

Hallo,

die Fehlermeldung lautet:

ErrorCode: 4612530443357519875 
ErrorMessage: Fehler beim Rendering. Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null 
SERVER_PORT 80 
DEFAULT_URL /portal_new/default.asp 
HTTP_USER_AGENT Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1) 
rq_Template internal/layout/vm/html/frames/appmain.vm 
rq_Lang de 
rc_CurrentParentId -1 
rq_SId F52B317B1629E15D9206CA818497915074FF79E2 
rq_RecId -1 
SERVER_NAME 10.17.99.97 
HTTP_ACCEPT image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* 
URL_QUERY_STRING /portal_new/default.asp?rq_TargetId=31303032&rq_AppId=31313933&rq_RecId=2D31&rq_SourceAppId=31313933&rq_ClientTy pe=68746D6C&rq_Template=696E7465726E616C2F6C61796F75742F766D2F68746D6C2F6672616D65732F6170706D61696E 2E766D&rq_Lang=6465&rq_SourceId=31303032&rq_SId=4635324233313742313632394531354439323036434138313834 3937393135303734464637394532 
rq_ClientType html 
CONTENT_TYPE 
rc_CurrentRecId -1 
loginNameUTF8 626C616E726531 
SERVER_PROTOCOL HTTP/1.0 
rc_CurrentRecords {1012=} 
SCHEME http 
rq_AppId 1193 
rq_SourceAppId 1193 
DOWNLOAD_URL /portal_new/default.asp 
REQUEST_URI /portal_new/default.asp 
co_SId F52B317B1629E15D9206CA818497915074FF79E2 
HTTP_ACCEPT_ENCODING 
QUERY_STRING rq_TargetId=31303032&rq_AppId=31313933&rq_RecId=2D31&rq_SourceAppId=31313933&rq_ClientType=68746D6C& rq_Template=696E7465726E616C2F6C61796F75742F766D2F68746D6C2F6672616D65732F6170706D61696E2E766D&rq_La ng=6465&rq_SourceId=31303032&rq_SId=4635324233313742313632394531354439323036434138313834393739313530 3734464637394532 
SYS_APP_1193 --- App information: --- guid: 3AE77B2ECEBF2CBECC583C0ADE23E99E4D74F76B id: 1193 template: 30 startfup: 1000 type: 1 --- FUP information: --- guid: FD98404C111C37588D0B13A64DC0A54DB8804A9D id: 1002 lang: de / item: Eingabeseite lang: en / item: Input Page --- FUP information: --- guid: FF8C8F7A264ECB251D0A9C39979D0C62109C573D id: 1000 lang: de / item: Hauptseite lang: en / item: Main Page --- FUP information: --- guid: E883A41FB2C48136479D638BC26D25C8FB3444C7 id: 1001 lang: de / item: Suche lang: en / item: Search 
rq_TargetId 1002 
loginDomain 6A76686C2E636F6D 
HTTP_COOKIE loginNameUTF8=626C616E726531; loginDomain=6A76686C2E636F6D; ASPSESSIONIDASQQRTTR=POHNNPMBACFKLFFADPPGEGDN 
rq_SourceId 1002 
Stack Trace de.uplanet.error.ExceptionBase: Fehler beim Rendering.
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null 
at de.uplanet.lucy.server.composer.Composer.c(Unknown Source) 
at de.uplanet.lucy.server.composer.Composer.a(Unknown Source) 
at de.uplanet.lucy.server.composer.Composer.processRequest(Unknown Source) 
at de.uplanet.lucy.server.connector.ServerBridgeRequest.internalProcessRequest(Unknown Source) 
at de.uplanet.lucy.server.connector.AbstractServerBridgeRequest$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAsPrivileged(Subject.java:437) 
at de.uplanet.lucy.server.connector.AbstractServerBridgeRequest.processRequest(Unknown Source) 
at de.uplanet.lucy.server.connector.RequestWorkerBase.processElement(Unknown Source) 
at de.uplanet.util.QueueWorker.run(Unknown Source) 
at de.uplanet.lucy.server.connector.RequestWorker.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:534) 
Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'berichte' in class exportPaket.Report threw exception class java.awt.HeadlessException : null 
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:246) 
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:175) 
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:220) 
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230) 
at org.apache.velocity.runtime.directive.Parse.render(Parse.java:181) 
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:114) 
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230) 
at org.apache.velocity.Template.merge(Template.java:256) 
... 12 more 

Ich nehm mal an, das liegt daran, dass ich versuch das mit einem JFrame zu lösen.

Gibts eine Möglichkeit über ein Applet o.ä zu gehen


Gruß

Alex


----------



## BLOEBAUM (28. Juni 2006)

Alex02 hat gesagt.:
			
		

> Hallo,
> 
> danke für Deine Hilfe.
> 
> ...


Hallo Alex,

ich bin zwar nicht der Java Experte, aber es sollten sowohl JFrame, als auch JFileChooser  möglich sein. Ich habe in meiner kuzen Java Zeit damit noch keine Probleme gehabt.

Gruß

Harald


----------



## Alex02 (28. Juni 2006)

Hallo Harald,

ich bekomme dei ganze Geschichte lokal zum Laufen.

Das Fenster wird angezeigt -> ich wähl ein Verzeichnis aus -> übergeb den Pfad.....

alles funktioniert.

Doch wenn ich versuche die Geschichte auf dem Server laufen zu lassen, bekomme ich die oben aufgeführte Fehlermeldung  

Gruß

Alex


----------



## BLOEBAUM (4. Juli 2006)

Hallo Alex,

da bin ich leider auch nicht in der Lage dir zu helfen.

Gruß

Harald


----------



## Alex02 (6. Juli 2006)

Hallo,

danke für Deine Hilfe.
Jetzt  es

Gruß

Alex


----------



## munuel (6. Juli 2006)

Wenn es lokal funktioniert und auf dem Server nicht dann scheint doch ein Berechtigungs-
Problem vorzuliegen!
gruss munuel


----------



## Alex02 (6. Juli 2006)

Hallo munuel,

es war ein Sicherheitsporble. 

Die ganze Aktion war "von hinten durch das Knie ins Auge"  
aber es  (auch auf dem Server)

Gruß

Alex


----------

