Hallo Leute,
ich habe ein kleines Problem und zwar habe ich im Server ein Menü erstellt. Ich möchte jedoch diese Funktionen aus den Menüs auch als Kontextmenü(PopupMenü) erstellen. Jedoch funktioniert es bei mir leider nicht! Hier mein Code:
ich habe ein kleines Problem und zwar habe ich im Server ein Menü erstellt. Ich möchte jedoch diese Funktionen aus den Menüs auch als Kontextmenü(PopupMenü) erstellen. Jedoch funktioniert es bei mir leider nicht! Hier mein Code:
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
/**
* @author zengin
* Mithilfe der Klasse Server findet die Kommunikation zwischen dem Client
* und dem Server über den Socket 45678 statt. Diese Klasse wurde so implementiert,
* sodass sich mehrere Clients beim Server anmelden können. Der Server ist also
* multi-user-fähig. Der Server protokolliert seine Aktivitäten mit Datum - und
* Zeitausgabe in eine Logfile mit dem Datei-Namen "logfile.csv".
*/
public class Server extends Frame implements ActionListener, MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
File serverdatei = new File("logfile.csv");
private static ArrayList<String> eintragsliste = new ArrayList<String>();
MenuBar menuBar;
Menu menu;
Menu menu1;
MenuItem menuItem;
PopupMenu popup;
Label label;
public Server()
{
super("Server-GUI");
this.setSize(200,130);
this.setLocation(100,250);
this.setBackground(Color.lightGray);
menuBar = new MenuBar();
this.setMenuBar(menuBar);
menu = new Menu("Datei");
menuBar.add(menu);
menuItem = new MenuItem("Oeffnen", new MenuShortcut(KeyEvent.VK_O));
menuItem.addActionListener(this);
menu.add(menuItem);
menuItem = new MenuItem("Speichern", new MenuShortcut(KeyEvent.VK_S));
menuItem.addActionListener(this);
menu.add(menuItem);
menu.addSeparator();
menuItem = new MenuItem("Beenden");
menuItem.addActionListener(this);
menu.add(menuItem);
menu = new Menu("Info");
menuBar.add(menu);
menuItem = new MenuItem("Info", new MenuShortcut(KeyEvent.VK_I));
menuItem.addActionListener(this);
menu.add(menuItem);
popup = new PopupMenu();
this.add(popup);
MenuItem mItem = new MenuItem("Info");
mItem.addActionListener(this);
popup.add(mItem);
popup.addSeparator();
mItem = new MenuItem("Datei öffnen");
mItem.addActionListener(this);
popup.add(mItem);
mItem = new MenuItem("Datei Speichern");
mItem.addActionListener(this);
popup.add(mItem);
label = new Label();
label.setSize(320,30);
label.setLocation(25, 250);
add(label);
this.setVisible(true);
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
this.enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public void processMouseEvent(MouseEvent me)
{
if(me.isPopupTrigger())
popup.show(me.getComponent(), me.getX(), me.getY());
}
public void actionPerformed(ActionEvent ae)
{
Object o = ae.getSource();
if(((MenuItem)o).getLabel().equals("Oeffnen"))
{
FileDialog fileDialog = new FileDialog(this, "Datei Oeffnen", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datei " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
if(((MenuItem)o).getLabel().equals("Speichern"))
{
FileDialog fileDialog = new FileDialog(this, "Datei speichern unter", FileDialog.SAVE);
fileDialog.setVisible(true);
label.setText("Speichern unter " + fileDialog.getDirectory() + fileDialog.getFile());
}
if(((MenuItem)o).getLabel().equals("Datei Oeffnen"))
{
FileDialog fileDialog = new FileDialog(this, "Datei Oeffnen", FileDialog.LOAD);
fileDialog.setVisible(true);
label.setText("Datei " + fileDialog.getDirectory() + fileDialog.getFile() + " ausgewählt");
}
if(((MenuItem)o).getLabel().equals("Datei Speichern"))
{
FileDialog fileDialog = new FileDialog(this, "Datei speichern unter", FileDialog.SAVE);
fileDialog.setVisible(true);
label.setText("Speichern unter " + fileDialog.getDirectory() + fileDialog.getFile());
}
if(((MenuItem)o).getLabel().equals("Beenden"))
{
MeinDialog meinDialog = new MeinDialog(this, "Ende-Dialog", "Wollen Sie die Anwendung wirklich beenden?");
if(meinDialog.getAntwort())
System.exit(0);
}
if(((MenuItem)o).getLabel().equals("Info"))
{
@SuppressWarnings("unused")
MeinDialog meinDialog = new MeinDialog(this, "Info", "Dieses Programm enthält ein Menü");
}
}
public void mouseEntered(MouseEvent arg0)
{
}
@Override
public void mouseClicked(MouseEvent me) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
/**
* Mithilfe der main-Methode findet die Kommunikation des Servers
* mit dem Client über Sockets statt. Die run-Methode
* der Klasse Thread wird ebenfalls implementiert und überschrieben.
* Innerhalb der run-Methode werden Zeit- und Datumsformate definiert.
* Die Optionen, die der Client auswählt, werden dem Server als Anfrage geschickt
* und werden auf der Konsole des Servers mit Zeit- und Datumsausgabe ausgegeben.
* Mithilfe der Variable "schreibenUeberSocket" vom Typ BufferedWriter-Objekt
* schreibt der Server dem Client über den Socket, ob die Auswahl des Clients
* in Ordnung ist. Der Aufruf der Methode start() in Zeile 136 der Klasse Thread
* bewirkt, dass sich mehrere Clients mit dem Server verbinden können.
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception
{
@SuppressWarnings("unused")
Server server = new Server();
ServerSocket myServerSocket = new ServerSocket(45678);
while(true)
{
final Socket myClientSocket = myServerSocket.accept();
(new Thread(new Runnable()
{
public void run()
{
try
{
BufferedReader lesenUeberSocket=new BufferedReader(new InputStreamReader(myClientSocket.getInputStream()));
BufferedWriter schreibenUeberSocket=new BufferedWriter(new OutputStreamWriter(myClientSocket.getOutputStream()));
Label aktuelleZeit = new Label(aktuelleUhrzeit(new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss")));
String anmeldung= aktuelleZeit + ";" + "Angemeldet an lokaler Adresse" + ";"
+ myClientSocket.getLocalAddress() + "\n";
eintragsliste.add(anmeldung);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" +
"--> Local Address angemeldet: "
+ myClientSocket.getLocalAddress());
String eingabeVonClientLesen;
try
{
while((eingabeVonClientLesen = lesenUeberSocket.readLine()) != null)
{
int a=Integer.parseInt(eingabeVonClientLesen);
if((a < 6) && (a > 0))
{
Label aktuelleZeit1 = new Label(aktuelleUhrzeit(new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss ")));
choice(a, aktuelleZeit1);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit1
+ "\t" + "\t" + "Der Client hat den Menuepunkt \'"
+ a + "\' ausgewaehlt");
schreibenUeberSocket.write("Ihre Auswahl ist in Ordnung :-)");
schreibenUeberSocket.newLine();
schreibenUeberSocket.flush();
}
else
{
choice(a, aktuelleZeit);
writeLog(eintragsliste);
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" + "Ungueltige Eingabe!");
schreibenUeberSocket.write("Ihre Auswahl ist leider nicht in Ordnung :-(");
schreibenUeberSocket.newLine();
schreibenUeberSocket.flush();
}
}
}
catch(Exception e)
{
System.out.println(
"*************************" + "\n" + e.getMessage());
}
System.out.println(
"*************************" + "\n" + "> " + aktuelleZeit
+ "\t" + "\t" +
"<-- Local Address abgemeldet: "
+ myClientSocket.getLocalAddress());
String abmeldung = aktuelleZeit + ";"
+ "Abgemeldet von der lokalen Adresse" + ";"
+ myClientSocket.getLocalAddress() + "\n";
eintragsliste.add(abmeldung);
writeLog(eintragsliste);
myClientSocket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}finally
{
}
}})).start();
}
}
/**
* Diese Methode definiert die Zeit- und Datumsformate, die auf
* der Konsole des Servers und in der Logfile dementsprechend
* formatiert ausgegeben werden.
*/
private static String aktuelleUhrzeit(SimpleDateFormat sdf)
{
sdf = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss");
Date aktuelleZeit = new Date();
return sdf.format(aktuelleZeit);
}
/**
* Mithilfe dieser Methode werden die einzelnen Einträge der Logfile formatiert.
* Die einzelnen Case-Fälle, die der Client auswählt,
* werden dann mit der entsprechend aktuellen Uhrzeit und dem aktuellen Datum
* in die Datei "logfile.csv" hinzugefügt.
* @param a
* @param zeit
*/
public static void choice(int a, Label zeit) {
StringBuilder gebeString = new StringBuilder();
gebeString.append(zeit);
gebeString.append(";");
switch (a) {
case 1:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("neue Person aufnehmen");
gebeString.append(";");
break;
case 2:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Records auflisten");
gebeString.append(";");
break;
case 3:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Records in eine Datei sichern");
gebeString.append(";");
break;
case 4:
gebeString.append("Der Client hat den Menuepunkt ");
gebeString.append(a + " ausgewaehlt");
gebeString.append(";");
gebeString.append("Datei löschen");
gebeString.append(";");
break;
default:
break;
}
gebeString.append("\n");
eintragsliste.add(gebeString.toString());
}
/**
* Mithilfe dieser Methode werden die Einträge
* in die serverdatei "logfile.csv" geschrieben.
* Innerhalb dieser Methode werden die Zeichen-Stream-Klassen
* BufferedWriter und FileWriter angewendet. Die
* Zeichen-Stream-Klasse BufferedWriter schickt seine Daten
* an FileWriter und dieser schreibt dann die Daten in die
* Datei "logfile.csv".
*/
public static void writeLog(ArrayList<String> eintragsliste) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("logfile.csv"));
for (int i = 0; i < eintragsliste.size(); i++) {
bw.write(eintragsliste.get(i));
}
bw.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}