Hallo,
ich habe ein (2) grundsätzliches Problem und finde dazu leider keine Lösung.
Problem1
1.) ich habe eine Main Klasse und eine Klasse DB und eine Klasse System (in Eclipse als eigene JavaClass).
In der Klasse DB werden meine Datenbankanbindung und Abfragen ausgeführt.
In der Klasse System, baue ich ein Array auf und erstelle Methoden zur internen Verwaltung von Daten (aus der DB).
Variante1
Wenn ich nun in der main meine Klasse DB und System instanziere wie folgt:
habe ich zwar Zugriff auf die Methoden der einzelnen Klassen von main aus, aber wenn ich aus DB eine Methode von der Instanz System aufrufen will, sagt mir Eclipse das er die Methode nicht finden kann.
Variante2
Ich habs gelöst in dem ich erst aus der main die DB instanziere und aus DB dann System. Warum funktioniert Variante 1 nicht?
Problem2
Das 2. Problem geht, denke ich, in die gleiche Richtung. Ich habe mit einem Programm begonnen, erst meine Datenbankanbindung geschrieben dann einen Thread in main erzeugt. In diesen Thread würde ich gerne Methoden aus DB aufrufen. Das passiert in Zeile 54. Das geht aber nicht, da er die oben erzeugte initdb nicht mehr kennt. Wie kann ich denn aus einem Thread Methoden aus einer anderen Klasse aufrufen? Ich will ja den Datenbank connect nur einmal ausführen.
Hier meine Main:
ich habe ein (2) grundsätzliches Problem und finde dazu leider keine Lösung.
Problem1
1.) ich habe eine Main Klasse und eine Klasse DB und eine Klasse System (in Eclipse als eigene JavaClass).
In der Klasse DB werden meine Datenbankanbindung und Abfragen ausgeführt.
In der Klasse System, baue ich ein Array auf und erstelle Methoden zur internen Verwaltung von Daten (aus der DB).
Variante1
Wenn ich nun in der main meine Klasse DB und System instanziere wie folgt:
Code:
DB initdb = new DB();
System sys = new System();
habe ich zwar Zugriff auf die Methoden der einzelnen Klassen von main aus, aber wenn ich aus DB eine Methode von der Instanz System aufrufen will, sagt mir Eclipse das er die Methode nicht finden kann.
Variante2
Ich habs gelöst in dem ich erst aus der main die DB instanziere und aus DB dann System. Warum funktioniert Variante 1 nicht?
Problem2
Das 2. Problem geht, denke ich, in die gleiche Richtung. Ich habe mit einem Programm begonnen, erst meine Datenbankanbindung geschrieben dann einen Thread in main erzeugt. In diesen Thread würde ich gerne Methoden aus DB aufrufen. Das passiert in Zeile 54. Das geht aber nicht, da er die oben erzeugte initdb nicht mehr kennt. Wie kann ich denn aus einem Thread Methoden aus einer anderen Klasse aufrufen? Ich will ja den Datenbank connect nur einmal ausführen.
Hier meine Main:
Code:
package pabschreibung;
import com.sun.corba.se.spi.activation.Server;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;
import java.util.Vector;
import org.omg.CORBA.SystemException;
public class Main {
public Main() {
}
public static void main(String[] args) throws SQLException, IOException {
db initdb = new db();
initdb.connect();
initdb.readSystems();
// Datenbank initialisiert und SystemNamen gelesen
System.out.println("Datenbank initialisierung: OK");
System.out.println("Anzahl Systeme in Datenbank: " + initdb.systeme.getSystemAnzahl());
ServerSocket server = new ServerSocket(4711);
while (true) {
Socket arbeiter = server.accept();
new WorkerThread (arbeiter).start();
}
}
static class WorkerThread extends Thread {
Socket arbeiter;
public WorkerThread(Socket arbeiter) throws IOException{
this.arbeiter=arbeiter;
System.out.println("Mit Rechner: " + arbeiter.getInetAddress() + "Port: " + arbeiter.getPort());
int b = arbeiter.getInputStream().read();
int c = arbeiter.getInputStream().read();
int d = arbeiter.getInputStream().read();
switch (b)
{
case '1':
System.out.println("Client will alle System");
// Code für Datensatz senden hier
case '2':
//Todo2
System.out.println("Auf Übertragung von System: " + c + "warten und in DB schreiben");
case '3':
System.out.println("Alle Server vom System " + c + "an Client senden");
//Wird nicht erkannt
initdb.readSystems();
//Wird nicht erkannt
case '4':
System.out.println("Server " + c + "vom System" + b + "in DB schreiben");
};
}}}