Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also ich seh da jetzt keinen Schuh der drückt. Hau in die Tasten und schrei, wenn es Probleme gibt. Denn das da oben sieht nach nem guten Auftrag aus, so wie ihn der Programmierer vom Kunden kennt <Sarkasmus>Schön spezifiziert und total wasserdicht</Sarkasmus>
Also ich seh da jetzt keinen Schuh der drückt. Hau in die Tasten und schrei, wenn es Probleme gibt. Denn das da oben sieht nach nem guten Auftrag aus, so wie ihn der Programmierer vom Kunden kennt <Sarkasmus>Schön spezifiziert und total wasserdicht</Sarkasmus>
schau dir jedes beliebige Beispiel im Internet an (Suche 'jfilechooser example'),
wie du das in dein Programm einbaust kann dir nicht beigebracht werden
entweder du probierst es und stellst konkrete Fragen oder jemand baut es dir komplett ein..
Danke für den Tipp, habe test mit dieser Seite gemacht JFileChooser, habe aber kein verwertbares Ergebnis bekommen:
Problem mit
Java:
chooser.addChoosableFileFilter(new FileFilter() {
public boolean accept(File f) {
if (f.isDirectory()) return true;
Zurück zum Entwurf: Die Buttons statte ich mit einem actionPerformed aus in dem dann der Dateidialog geöffnet wird oder?
---------------Edit------------------
Datei Explorer öffnet sich
Java:
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() == jButton) {
int returnVal = fc.showOpenDialog(FileChooserTest.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
// InputFilenameTextfield.append(file.getName());
} else {
// InputFilenameTextfield.append("Open command cancelled by user.");
}
}
}
Wie bekomme ich jetzt den Datenpfad in mein Textfeld?
> Wie bekomme ich jetzt den Datenpfad in mein Textfeld?
schau dir an was file an Methoden liefert, etwa getAbsolutePath(),
und das in das Textfeld schreiben, ein komplett separates Problem,
im Idealfall variable.setText(), ansonsten kann man daraus für sich lange Probleme stricken..
> Wie bekomme ich jetzt den Datenpfad in mein Textfeld?
schau dir an was file an Methoden liefert, etwa getAbsolutePath(),
und das in das Textfeld schreiben, ein komplett separates Problem,
im Idealfall variable.setText(), ansonsten kann man daraus für sich lange Probleme stricken..
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JTextField;
import java.awt.Rectangle;
import javax.swing.JButton;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
public class FileChooserTest extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextField InputFileTextfield = null;
private JTextField OutputFileTextfield = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JButton Generate = null;
translator t = new translator(); // @jve:decl-index=0:
/**
* This is the default constructor
*/
public FileChooserTest() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
fc.setSize(new Dimension(557, 336));
this.setSize(661, 248);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getInputFileTextfield(), null);
jContentPane.add(getOutputFileTextfield(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJButton1(), null);
jContentPane.add(getGenerate(), null);
}
return jContentPane;
}
/**
* This method initializes InputFilenameTextfield
*
* @return javax.swing.JTextField
*/
private JTextField getInputFileTextfield() {
if (InputFileTextfield == null) {
InputFileTextfield = new JTextField();
InputFileTextfield.setBounds(new Rectangle(115, 32, 515, 35));
}
return InputFileTextfield;
}
/**
* This method initializes OutputFileTextfield
*
* @return javax.swing.JTextField
*/
private JTextField getOutputFileTextfield() {
if (OutputFileTextfield == null) {
OutputFileTextfield = new JTextField();
OutputFileTextfield.setBounds(new Rectangle(117, 106, 512, 36));
}
return OutputFileTextfield;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
JFileChooser fc = new JFileChooser(); // @jve:decl-index=0:visual-constraint="90,288"
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton("Input File");
jButton.setBounds(new Rectangle(8, 27, 100, 39));
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() == jButton) {
int returnVal = fc.showOpenDialog(FileChooserTest.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
InputFileTextfield.setText(file.getAbsolutePath());
t.setInputFilename(InputFileTextfield.getText());
}
}
}
});
}
return jButton;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton("Output File");
jButton1.setBounds(new Rectangle(6, 105, 102, 36));
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (e.getSource() == jButton1) {
int returnVal = fc.showOpenDialog(FileChooserTest.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
OutputFileTextfield.setText(file.getAbsolutePath());
t.setOutputFilename(OutputFileTextfield.getText());
}
}
}
});
}
return jButton1;
}
public String InputTextField(){
return InputFileTextfield.getText();
}
public String OutputTextField(){
return OutputFileTextfield.getText();
}
/**
* This method initializes Generate
*
* @return javax.swing.JButton
*/
private JButton getGenerate() {
if (Generate == null) {
Generate = new JButton("Generate");
Generate.setBounds(new Rectangle(494, 167, 129, 38));
Generate.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
//???
}
});
}
return Generate;
}
} // @jve:decl-index=0:visual-constraint="40,17"
Der Funktioniert auch soweit. Jetzt möchte ich nur den String den ich hier raus bekomme in meine Klasse Translator übergeben, die eine Umrechnung einer CSV Datei zu einer XML Datei macht.
Ich bekomme dabei 2 Fehler geworfen:
1.
Java:
IWAV0048I Java Bean translator started with null constructor
2.
Java:
IWAV0052E Invocation Target Exception creating translator
java.lang.reflect.InvocationTargetException
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 org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeansLauncher.main(JavaBeansLauncher.java:86)
Caused by: java.lang.NullPointerException
at translator.translator(translator.java:54)
at translator.<init>(translator.java:74)
... 5 more
So und hier mal der Translator Java Code. Für eure Hilfe wäre ich echt sau dankbar, ich komme nämlich nicht weiter
wahrscheinlich gab es in translator.translator() in der Zeile
> myFile = new FileReader(Inputfile);
einen Fehler, deswegen ist buff null und im finally kommt die Exception, frage dort buff != null ab, bei myFile genauso
erhälst du eine Ausgabe '"Error2 :"? vielleicht erst besser zu sehen wenn du die andere Exception ausbaust
-----
ansonsten ist der Ablauf nicht ganz klar,
dein schlimmes Code-Niveau trägt dazu bei, Klassen groß schreiben!, Methoden + Variablen klein,
keine Methoden wie Klassen bzw. Konstruktoren benennen,
[c]public List<String> translator()[/c] in einer Klasse [c]translator[/c] geht absolut nicht, das muss
[c]public List<String> readLinesFromFile()[/c] in einer Klasse [c]Translator[/c] heißen oder ähnlich besser
----
sehr schlecht ist auch, dass du
> translator t = new translator();
direkt in der Klasse FileChooserTest stehen hast,
schreibe die Objekterzeugung in irgendeine Methode wie initialize() von FileChooserTest ,
damit ein wenig Kontrolle besteht wann was geschieht
und bedenke:
derzeit steht direkt im Konstruktor von translator
> out = new StreamResult(Outputfile);
dieses Outputfile ist aber anfangs null, soll erst von einer set-Methode gesetzt werden,
wie soll das passieren noch vor dem Konstruktor-Aufruf?
die ganze Verknüpfung von erzeugten Objekten und Konstruktoren die eine Menge machen, bedeutet derzeit,
dass direkt beim Erstellen eines FileChooserTest-Objektes bereits
> out = new StreamResult(Outputfile);
ausgeführt wird
----
allgemein:
immer ganz ruhig einen Schritt nach dem anderen programmieren und den Überblick behalten wann was wo warum passiert,
am Anfang ist ein Programm leer, macht gar nichts, das ist der Idealzustand,
nur nach und nach Dinge einbauen, Konstruktoren möglichst leer halten und nur kontrolliert dann Dinge ausführen wenn sie auch angebracht sind
'Konstruktoren möglichst leer halten' heißt übrigens nicht, vom Konstruktor nur eine Methode aufzurufen, in der alles drin steht, dann wird trotzdem eine Menge ausgeführt,
ein leerer Konstruktor macht wirklich wenig bis gar nichts, der Aufrufer würde die nächste Aktion starten:
>wahrscheinlich gab es in translator.translator() in der Zeile
> myFile = new FileReader(Inputfile);
>einen Fehler, deswegen ist buff null und im finally kommt die Exception, frage dort buff != null ab, bei >myFile genauso
Genau das ist das Problem, der String == null...
-----
>ansonsten ist der Ablauf nicht ganz klar,
>dein schlimmes Code-Niveau trägt dazu bei, Klassen groß schreiben!, Methoden + Variablen klein,
>keine Methoden wie Klassen bzw. Konstruktoren benennen,
>[c]public List<String> translator()[/c] in einer Klasse [c]translator[/c] geht absolut nicht, das muss
>[c]public List<String> readLinesFromFile()[/c] in einer Klasse [c]Translator[/c] heißen oder ähnlich >besser
habe ich geändert, zu meiner Entschuldigung ist zu sagen das ich da wild rumprobiert habe, trotzdem hast du Recht, dass es die Hilfe erschwert...
----
>sehr schlecht ist auch, dass du
> translator t = new translator();
>direkt in der Klasse FileChooserTest stehen hast,
>schreibe die Objekterzeugung in irgendeine Methode wie initialize() von FileChooserTest ,
>damit ein wenig Kontrolle besteht wann was geschieht
Problem hierbei: Ich bekomme Fehler angezeigt: t.setInputFilename(InputFileTextfield.getText()); und t.setOutputFilename(OutputFileTextfield.getText()); werden nicht mehr erkannt...
>und bedenke:
>derzeit steht direkt im Konstruktor von translator
> out = new StreamResult(Outputfile);
>dieses Outputfile ist aber anfangs null, soll erst von einer set-Methode gesetzt werden,
>wie soll das passieren noch vor dem Konstruktor-Aufruf?
>die ganze Verknüpfung von erzeugten Objekten und Konstruktoren die eine Menge machen, bedeutet >derzeit,
>dass direkt beim Erstellen eines FileChooserTest-Objektes bereits
> out = new StreamResult(Outputfile);
>ausgeführt wird
Ich habe den Konstruktor geleert, ich habe statt des Konstruktors nun eine Klasse translate() die die Aufgaben übernimmt. Im Konstruktor steht nun nichts mehr.
um welchen Fehler geht es denn aktuell?
dass
> t.setInputFilename(InputFileTextfield.getText());
nicht funktioniert?
das kann man für sich nicht beantworten, wo steht diese Zeile, in welcher Klasse in welcher Methode,
ist t da ordentlich definiert?,
funktioniert der Zugriff auf andere Attribute wie 'jButton'?
auf Felder wie InputFileTextfield in FileChooserTest solltest du übrigens sowieso nicht direkt zugreifen,
das ist anfangs null, wird in der get-Methode initialisiert wenn nicht vorhanden,
auch wenn es bis zu deinem Problemcode vielleicht schon initialisiert ist, ist es bei solchen Konstruktoren sauberer, nur die get-Methode zu verwenden, nicht das Attribut direkt anzusprechen
----
die Klasse Translator sieht gut aufgeräumt aus,
hatte meine Zweifel dass meine Vorschläge dazu direkt verständlich sind
IWAV0048I Java Bean Translator started with null constructor
und der 2.
Code:
IWAV0052E Invocation Target Exception creating Translator
java.lang.reflect.InvocationTargetException
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 org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeansLauncher.main(JavaBeansLauncher.java:86)
Caused by: java.lang.NullPointerException
at Translator.einlesen(Translator.java:61)
at Translator.<init>(Translator.java:26)
... 5 more
Ich dachte, dass würde mit dem Konstruktor zusammenhängen, aber anscheinende nicht, denn der Konstruktor ist jetzt leer. D.h. er dürfte die Funktion garnicht aufrufen...
die erste Aufgabe wäre herauszufinden, WO sie auftreten,
verwende mehr try/catches, baue notfalls zwischen jedem einzelnen normalen Java-Befehl ein System.out.println()
wo wird der Translator erstellt?
kommentiere das aus, kein Fehler?
als nächstes
Java:
System.out.println("vor T");
Translator t = new Translator();
System.out.println("T erstellt: "t);
und nix weiter in der Richtung machen,
kommen die beiden Ausgaben und keine Fehler?
dann als nächstes das machen was du machen musst usw, Code auskommentieren, Kommentare einbauen, alles mögliche,
---
ich sehe jetzt aber doch noch ein Problem:
Java:
public class Translator {
private String Inputfile;
private String Outputfile;
private StreamResult out;
private TransformerHandler th;
private AttributesImpl atts;
List<String> list = einlesen();
hier wird einlesen() immer noch direkt bei Objekterzeugung, also wie im Konstruktor ausgeführt,
auf sowas unbedingt verzichten, hatte ich vorher übersehen, schreibe nur
Java:
private List<String> list;
oder was auch immer,
einlesen() soll bestimmt erst dann ausgeführt werden, wenn dafür die Zeit gekommen ist,
gleiches Problem wie oben schon
Eine Frage habe ich noch: Ich würde gerne im Auswahlmenü für Inputfiles gerne nur CSV Dateien sehen und im Outputfile nur gpx. Nur wie funktionieren die Filter?