Liebe Community
Ich habe vor ein paar Wochen mit Java angefangen und dazu ein Internet-Tutorial durchgearbeitet. Soweit bin ich damit ganz gut zurecht gekommen, stoße jetzt aber bei meinem ersten kleinen Programm auf Probleme.
Ganz grob. Es geht darum, dass ich bestimmte Dateien einzeln (die täglich mehrfach wechseln) verarbeite. Vorher möchte ich allerdings eine Sicherheitskopie der Datei in einen "Backup-Ordner" legen. Hier ist der Quellcode, meine Erläuterungen stehen unten.
Immer wenn ich das Script ausführe bringt der Compiler eine Fehlermeldung bei Zeile 18 und Zeile 19.
Er beschwert sich mit
"non-static variable souP cannot be referenced from a static context"
Es steht ziemlich viel "unwichtiges" Zeugs drinnen (das Layout) was Primär jetzt gar nicht interessiert. Allerdings soll beim Klicken auf die Buttons "RVP" und "GPP" später eben jene "Textprozessierung" stattfinden.
Doch nun mein Problem...
Für die FileCopy-Methode hatte ich gelesen, dass man es u.a. mit dem Input-Output Stream machen kann. Lieg ich aber richtig, dass hierfür (Linie 25,26) ein File (und keine Pfade zu Dateien) übergeben werden müssen?
Da sich die Dateien häufig ändern, wollte ich eine eigene Klasse erstellen, deren Objekte (FCOPY) zwei Strings "beinhalten". Diese "temporären" Strings wollte ich dann im Konstruktor an zwei "öffentliche" Variablen übergeben und mit deren Hilfe zwei File's erstellen, die dann die "FileCopy"-Methode speisen.
Wenn ich dann auf den Button klicke, soll das FCOPY Objekt (dem automatisch 2 Strings zugewiesen werden - ist noch nicht geschrieben) mit der FileCopy Methode prozessiert werden.
Soweit meine Ideen. Wo liegt der Fehler in meiner Denkweise=) Es ist schon klar, dass es probleme macht nicht-statische Elemente mit statischen zu "verbinden". Aber was ist denn sonst meine Möglichkeit...
Ich habe vor ein paar Wochen mit Java angefangen und dazu ein Internet-Tutorial durchgearbeitet. Soweit bin ich damit ganz gut zurecht gekommen, stoße jetzt aber bei meinem ersten kleinen Programm auf Probleme.
Ganz grob. Es geht darum, dass ich bestimmte Dateien einzeln (die täglich mehrfach wechseln) verarbeite. Vorher möchte ich allerdings eine Sicherheitskopie der Datei in einen "Backup-Ordner" legen. Hier ist der Quellcode, meine Erläuterungen stehen unten.
Immer wenn ich das Script ausführe bringt der Compiler eine Fehlermeldung bei Zeile 18 und Zeile 19.
Er beschwert sich mit
"non-static variable souP cannot be referenced from a static context"
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
class FCOPY
{
String souP, destP;
FCOPY(String strSOU, String strDEST)
{
souP =strSOU;
destP = strDEST;
}
public static void copyFile(File source, File dest) throws IOException
{
File sou = new File("\"" + souP + "\"");
File dest = new File("\"" + destP + "\"");
InputStream is = null;
OutputStream os = null;
try
{
is = new FileInputStream(sou);
os = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while((length = is.read(buffer)) > 0)
{
os.write(buffer,0,length);
}
}
finally
{
is.close();
os.close();
}
}
}
public class LWare extends JFrame implements ActionListener
{
JButton RVP, GPP; // erstellt RVP und GPP Button
JLabel Titel, Version, Quest, Leer;
JPanel st = new JPanel();
JPanel nd = new JPanel();
JPanel rd = new JPanel();
JPanel four = new JPanel();
JPanel five = new JPanel();
JPanel BOXpanel = new JPanel();
Double oneOFten, twoOFten, threeOFten;
Integer IoneOFten, ItwoOFten, IthreeOFten;
Font F1, F2, F3, F4;
String RVPsource, RVPdest, GPPsource, GPPdest;
FCOPY RVPfile;
FCOPY GPPfile;
public LWare(String title) //Konstruktor
{
super( title ); //übernimmt alle Aktionen vom JFrame Konstruktor
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); // Extraktion Auflösung Display
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
final int height = dm.getHeight()/2;
final int width = dm.getWidth()/2;
oneOFten = new Double((height)*0.1);
twoOFten = new Double((height)*0.2);
threeOFten = new Double((height)*0.3);
IoneOFten = (int) Math.round(oneOFten);
ItwoOFten = (int) Math.round(twoOFten);
IthreeOFten = (int) Math.round(threeOFten);
Font F1 = new Font("Arial", Font.BOLD, 10);
Font F2 = new Font("Arial", Font.BOLD, 15);
Font F3 = new Font("Arial", Font.BOLD, IthreeOFten);
Font F4 = new Font("Arial", Font.BOLD, 30);
RVP = new JButton("RVP"); //neue Commandos
RVP.setFont(F2);
RVP.setSize(width/2,ItwoOFten);
GPP = new JButton("GPP");
GPP.setFont(F2);
GPP.setSize(width/2,ItwoOFten);
Titel = new JLabel("LWare");
Titel.setFont(F3);
Titel.setSize(width,IthreeOFten);
Version = new JLabel("Version 1.0");
Version.setFont(F1);
Version.setSize(width,IoneOFten);
Quest = new JLabel("Which programm do you want to start?");
Quest.setFont(F2);
Quest.setSize(width,ItwoOFten);
Leer = new JLabel(" ");
Leer.setFont(F4);
Leer.setSize(width,(height-(2*ItwoOFten)-IoneOFten-IthreeOFten));
RVP.setActionCommand("Auswahl_RVP"); //definiert, was die Aktion von RVP/GPP für eine Referenz/Wert bekommt
GPP.setActionCommand("Auswahl_GPP");
RVP.addActionListener( this ); // lädt einen Aktions-Listener für den RVP und GPP Button
GPP.addActionListener( this );
st.add( Titel );
nd.add( Version );
rd.add( Leer );
four.add( Quest );
five.add( RVP );
five.add( GPP );
BOXpanel.setLayout( new BoxLayout( BOXpanel, BoxLayout.Y_AXIS) );
BOXpanel.add( st );
BOXpanel.add( nd );
BOXpanel.add( rd );
BOXpanel.add( four );
BOXpanel.add( five );
add( BOXpanel ); //fügt RVP und GPP Button hinzu
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); //regelt was passiert, wenn auf X geklickt wird
}
public void actionPerformed( ActionEvent evt ) //regelt die Aktionen in Abhängigkeit des Klicks
{
if( evt.getActionCommand().equals("Auswahl_RVP") )
{
RVPsource = "C:/Users/Arbeit/Desktop/OUTPUT/RVP 2014_05_08-1_20140508_132959.csv";
RVPdest = "C:/Users/Arbeit/Desktop/LWare/Backup/RVP 2014_05_08-1_20140508_132959.csv";
FCOPY RVPfile = new FCOPY(RVPsource, RVPdest);
RVPfile.copyFile();
System.out.println("RVP");
}
if( evt.getActionCommand().equals("Auswahl_GPP") )
{
System.out.println("GPP");
}
}
public static void main( String[] args ) //Hauptmethode
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); // Extraktion Auflösung Display
GraphicsDevice gd = env.getDefaultScreenDevice();
DisplayMode dm = gd.getDisplayMode();
final int height = dm.getHeight()/2;
final int width = dm.getWidth()/2;
LWare Haupt = new LWare("LWare");
Haupt.setSize(width,height);
Haupt.setLocationRelativeTo( null );
Haupt.setVisible( true );
Haupt.setResizable( false );
}
}
Es steht ziemlich viel "unwichtiges" Zeugs drinnen (das Layout) was Primär jetzt gar nicht interessiert. Allerdings soll beim Klicken auf die Buttons "RVP" und "GPP" später eben jene "Textprozessierung" stattfinden.
Doch nun mein Problem...
Für die FileCopy-Methode hatte ich gelesen, dass man es u.a. mit dem Input-Output Stream machen kann. Lieg ich aber richtig, dass hierfür (Linie 25,26) ein File (und keine Pfade zu Dateien) übergeben werden müssen?
Da sich die Dateien häufig ändern, wollte ich eine eigene Klasse erstellen, deren Objekte (FCOPY) zwei Strings "beinhalten". Diese "temporären" Strings wollte ich dann im Konstruktor an zwei "öffentliche" Variablen übergeben und mit deren Hilfe zwei File's erstellen, die dann die "FileCopy"-Methode speisen.
Wenn ich dann auf den Button klicke, soll das FCOPY Objekt (dem automatisch 2 Strings zugewiesen werden - ist noch nicht geschrieben) mit der FileCopy Methode prozessiert werden.
Soweit meine Ideen. Wo liegt der Fehler in meiner Denkweise=) Es ist schon klar, dass es probleme macht nicht-statische Elemente mit statischen zu "verbinden". Aber was ist denn sonst meine Möglichkeit...