ich habe da mal eine Reihe von Fragen.
Fange ich mal mit was „leichtem“ an.
Also wie erstelle ich aus einem Eclipse Projekt eine für sich eigentständig ausführbare *.jar datei?!
Und was mir noch größeres Kopfzerbrechen macht ist folgender Code.
public void starte() {
try {
serviceSocket = server.accept();
bos = new BufferedOutputStream(serviceSocket.getOutputStream());
osw = new OutputStreamWriter(bos);
bis = new BufferedInputStream(serviceSocket.getInputStream());
isr = new InputStreamReader(bis);
instr = new StringBuffer();
} catch (IOException e) {
e.printStackTrace();
}
na ja… jedenfalls kommt davor noch der Konstruktor
public Server() throws IOException{
/*
* Fenster zum Warten
*/
JTextArea l = new JTextArea();
f.add(l);
l.append(„Bitte haben Sie geduld.\nSie müssen warten bis sich ein Mitspieler“ +
" mit Ihnen verbindet.");
f.pack();
/*
* Rest
*/
spielfeld = new Spielfeld(2, false);
spielfeld.holeServer(this);
f.setVisible(true);
server = new ServerSocket(portnummer);
starte();
}
Das „Fenster zum Warten“ habe ich nur zu Testzwecken drin. Ist eigentlich so nicht notwendig aber das Problem ist wenn ich nun das starte dann baut sich Spielfeld erst aus, sobald sich ein Client connected. Also wie mache ich das mit der accept() Methode besser, das dieses Problem nicht mehr besteht?
Also wie erstelle ich aus einem Eclipse Projekt eine für sich
eigentständig ausführbare *.jar datei?!
Ich würds mal unter File > Export > JAR file probieren.
Und was mir noch größeres Kopfzerbrechen macht ist folgender
Code.
public void starte() {
try {
serviceSocket = server.accept();
bos = new
BufferedOutputStream(serviceSocket.getOutputStream());
osw = new OutputStreamWriter(bos);
bis = new
BufferedInputStream(serviceSocket.getInputStream());
isr = new InputStreamReader(bis);
instr = new StringBuffer();
} catch (IOException e) {
e.printStackTrace();
}
na ja… jedenfalls kommt davor noch der Konstruktor
public Server() throws IOException{
/*
* Fenster zum Warten
*/
JTextArea l = new JTextArea();
f.add(l);
l.append(„Bitte haben Sie geduld.\nSie müssen warten bis
sich ein Mitspieler“ +
" mit Ihnen verbindet.");
f.pack();
/*
* Rest
*/
spielfeld = new Spielfeld(2, false);
spielfeld.holeServer(this);
f.setVisible(true);
server = new ServerSocket(portnummer);
starte();
}
Das „Fenster zum Warten“ habe ich nur zu Testzwecken drin. Ist
eigentlich so nicht notwendig aber das Problem ist wenn ich
nun das starte dann baut sich Spielfeld erst aus, sobald sich
ein Client connected. Also wie mache ich das mit der accept()
Methode besser, das dieses Problem nicht mehr besteht?
Ohne mich mit Sockets en detail auszukennen:
Ich würde mal vermuten, dass die accept-Methode auf Verbindungen wartet. In dieser Zeit ist das Programm quasi blockiert (es wartet ja auf eine Verbindung).
Ich würde das Warten auf die Verbindung und die GUI in zwei Threads
aufteilen. Dann kann sich deine GUI aufbauen und bleibt bedienbar, auch wenn noch keine Verbindung vorhanden ist. Allerdings muss man sich dann evtl. mal Gedanken um die Synchronisation der beiden Threads machen.
Allerdings war ich auch schonmal so schlau und habe versucht es als *.jar zu extrahieren. Allerdings kommt beim starten "Failed to load Main Class manifest attribute from …Dateiname.jar
Was kann es sein was ich falsch mache?
Allerdings war ich auch schonmal so schlau und habe versucht
es als *.jar zu extrahieren. Allerdings kommt beim starten
"Failed to load Main Class manifest attribute from
…Dateiname.jar
Was kann es sein was ich falsch mache?
ich vermute, dass es daran liegt dass er die main-class nicht findet.
du musst dein manifest file nochmal kontrollieren.
wenn du unter den Console arbeitest, hier ist ein hilfreichende link zum thema. http://www.java-forum.org/de/viewtopic.php?t=14970
und wenn du unter eclipse den jar file erstellt hast , du musst nur den name der main class in eine dialog fenster geben unter eclipse beim erstellung von deinem jar.