Ich erstelle gerade ein kleines Programm, mit dem man verschlüsselt Dateien zwischen mehreren Hosts über direkte Verbindungen übertragen kann, ich hab ca. 1/3 fertig und stosse nun auf ein für mich unverständliches Problem: Nach dem hinzufügen eines Netzwerk-Teilnehmers liegt der switch-Fall "action.keineTeilnehmerHinweis" in der Klasse "action" vor, was aber eigentlich nicht sein kann (sollte), da ja soeben ein Teilnehmer hinzugefügt wurde und zudem (noch) keine wiederholte Abfrage über die Anzahl der bereits eingetragenen Teilnehmer besteht ... kann mir jemand meinen Fehler zeigen? Danke.
Mab benötigt zum kompilieren diese Lib: http://sourceforge.net/projects/jregistrykey/
Mab benötigt zum kompilieren diese Lib: http://sourceforge.net/projects/jregistrykey/
Code:
package dataninja;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class dateitransfer {
public static void main(String[] args) {
GUI oberfl = new GUI("erster Test");
oberfl.introscreen();
registry r = new registry(true);
String[][] netzwerk = r.getTeilnehmer();
if(netzwerk == null) {
oberfl.leereDB = true;
oberfl.meldung("Es wurden bisher keine Netzwerk-Teilnehmer eingestellt, bitte ändern sie das im nachfolgenden Dialog!");
}
}
}
class listener extends Thread {
public String fehler = null;
private boolean ende = false;
public String zieldatei = null;
private watchdog w = null;
listener(watchdog w) {
this.setPriority(Thread.MIN_PRIORITY);
this.w = w;
this.start();
}
@Override public void run() {
try {
ServerSocket ssocket = new ServerSocket(10000);
while (ssocket.isBound() && this.ende == false) {
Socket s = ssocket.accept();
System.out.println("SERVER: wir lauschen jetzt!");
if (s.isConnected()) {
TCP t = new TCP(this.w);
t.empfangen(s, zieldatei);
}
}
} catch (IOException ex) {
this.fehler += " %%%Socket konnte nicht angelegt werden";
}
}
}
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dataninja;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
*
* @author tha_specializt
*/
class GUI extends JFrame {
public boolean leereDB = false;
private final GridBagLayout l = new GridBagLayout();
private final GridBagConstraints g = new GridBagConstraints();
private final int seitenabstand_v = 50;
private final int seitenabstand_h = 50;
GUI(String titel) {
super(titel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(this.l);
}
public void neuerTeilnehmer() {
JInternalFrame intern = new JInternalFrame("neuen Netzwerk-Teilnehmer hinzufügen");
intern.setPreferredSize(new Dimension((int)this.getSize().getWidth() / 2, (int)this.getSize().getHeight() / 2));
intern.setLayout(this.l);
this.g.gridy = 1;
this.g.gridx = 1;
this.g.fill = GridBagConstraints.HORIZONTAL;
this.g.insets = new Insets(0,10,0,10);
JLabel nicktext = new JLabel("Nickname");
nicktext.setHorizontalAlignment(JLabel.CENTER);
intern.getContentPane().add(nicktext, this.g);
this.g.gridx = 2;
JLabel hosttext = new JLabel("Hostname / FQDN / IP");
hosttext.setHorizontalAlignment(JLabel.CENTER);
intern.getContentPane().add(hosttext, this.g);
this.g.gridx = 3;
JLabel porttext = new JLabel("Port");
porttext.setHorizontalAlignment(JLabel.CENTER);
intern.getContentPane().add(porttext, this.g);
this.g.gridy = 2;
this.g.gridx = 1;
JTextField nick = new JTextField();
nick.setPreferredSize(new Dimension(100, (int)nick.getPreferredSize().getHeight()));
intern.getContentPane().add(nick, this.g);
this.g.gridx = 2;
JTextField host = new JTextField();
intern.getContentPane().add(host, this.g);
this.g.gridx = 3;
JTextField port = new JTextField();
port.setPreferredSize(new Dimension(40, (int)port.getPreferredSize().getHeight()));
intern.getContentPane().add(port, this.g);
this.g.gridx = 1;
this.g.gridwidth = 3;
this.g.gridy = 3;
this.g.insets = new Insets(30,0,0,0);
this.g.fill = GridBagConstraints.NONE;
JButton ok = new JButton("hinzufügen");
ok.setHorizontalAlignment(JButton.CENTER);
JTextField[] felder = {nick, host, port};
ok.addActionListener(new action(intern, felder, action.neuerTeilnehmer));
intern.getContentPane().add(ok, this.g);
this.getContentPane().add(intern);
intern.setVisible(true);
}
public void meldung(String m) {
watchdog w = new watchdog(this);
JInternalFrame intern = new JInternalFrame("Systemmitteilung");
intern.setOpaque(true);
JButton ok = new JButton ("OK");
if(this.leereDB) {
ok.addActionListener(new action(this, intern, action.keineTeilnehmerHinweis));
this.leereDB = false;
} else {
ok.addActionListener(new action(intern));
}
JLabel text = new JLabel(m);
intern.setLayout(this.l);
intern.setPreferredSize(new Dimension((int)this.getSize().getWidth() / 2, (int)this.getSize().getHeight() / 2));
this.g.gridx = 2;
if(text.getWidth() >= (int)intern.getSize().getWidth()) {
int zeilen = (int)Math.ceil(intern.getPreferredSize().getWidth() / text.getPreferredSize().getWidth());
String[] geteilt = text.getText().split("");
geteilt[0] += "<HTML><BODY>";
JLabel temptext = new JLabel("");
for(int i = 0; i < geteilt.length; i++) {
temptext.setText(temptext.getText()+geteilt[i]);
if(temptext.getPreferredSize().getWidth() >= intern.getPreferredSize().getWidth()-this.seitenabstand_h) {
for(int b = i; b > 0; b--) {
if(geteilt[b].equals(" ")) {
geteilt[b] += "
";
break;
}
}
temptext.setText("");
}
}
geteilt[geteilt.length-1] += "</BODY></HTML>";
text.setText("");
for(int i = 0; i < geteilt.length; i++) {
text.setText(text.getText()+geteilt[i]);
}
}
//!!!!!!!!!!!!!!!!!Wenn text_v >= seitenabstand_v!!!!!!!!!!!!!!!!!!!!
intern.getContentPane().add(text, this.g);
this.g.gridy = 2;
JLabel leer = new JLabel(" ");
intern.getContentPane().add(leer, this.g);
this.g.gridy = 3;
intern.getContentPane().add(ok, this.g);
this.getContentPane().add(intern);
intern.setVisible(true);
}
void introscreen() {
ImageIcon icon = new ImageIcon("C:/Users/tha_specializt/Desktop/kewle Bildaz/Hacker.jpg");
JLabel label = new JLabel(icon);
label.setOpaque(false);
//this.getContentPane().add(label);
this.setSize(new Dimension(800,600));
this.setLocationRelativeTo(null);
this.setVisible(true); }
}
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dataninja;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JInternalFrame;
import javax.swing.JTextField;
/**
*
* @author tha_specializt
*/
class action implements ActionListener {
public final static byte neuerTeilnehmer = 1;
public final static byte keineTeilnehmerHinweis = 2;
public final static byte scrollpane = 3;
private JInternalFrame f = null;
private GUI gui = null;
private JTextField[] felder = null;
private byte typ = 0;
action(JInternalFrame f) {
this.f = f;
}
action(GUI gui, JInternalFrame f, byte typ) {
this.gui = gui;
this.f = f;
this.typ = typ;
}
action(JInternalFrame f, JTextField[] felder, byte typ) {
this.f = f;
this.typ = typ;
this.felder = felder;
}
action(GUI gui, byte typ) {
this.gui = gui;
this.typ = typ;
}
public void actionPerformed(ActionEvent e) {
try {
if(this.f != null && this.typ == 0 )
this.f.setClosed(true);
switch(this.typ) {
case(action.neuerTeilnehmer) : {
new registry(false).teilnehmerHinzufuegen(this.felder[0].getText(), this.felder[1].getText(),
Integer.parseInt(this.felder[2].getText()));
this.felder[0].setText("");
this.felder[1].setText("");
this.felder[2].setText("");
this.f.setClosable(true);
};
case(action.keineTeilnehmerHinweis) : {
this.f.setClosed(true);
this.gui.neuerTeilnehmer();
};
}
} catch (PropertyVetoException ex) {
Logger.getLogger(action.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dataninja;
import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RegistryValue;
import ca.beq.util.win32.registry.RootKey;
/**
*
* @author tha_specializt
*/
class registry {
private final RegistryKey dn = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\" +
"tha_specializt\\DataNinja");
registry(boolean init) {
if(init) {
RegistryKey pfad = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software");
if(pfad.hasSubkey("tha_specializt") == false)
pfad.createSubkey("tha_specializt");
RegistryKey ziel = new RegistryKey(RootKey.HKEY_CURRENT_USER, "Software\\" +
"tha_specializt");
if(ziel.hasSubkey("DataNinja") == false)
ziel.createSubkey("DataNinja");
RegistryValue hosts;
if(this.dn.hasValue("hosts") == false) {
hosts = new RegistryValue("hosts", "");
dn.setValue(hosts);
}
}
}
public String[][] getTeilnehmer() {
String daten = this.dn.getValue("hosts").getData().toString();
if(daten.length() <= 0)
return null;
String[] datenarray = daten.split(";");
int anzahlTeilnehmer = datenarray.length;
if(anzahlTeilnehmer == 0)
return null;
String[][] teilnehmer = new String[3][anzahlTeilnehmer];
for(int i = 0; i < anzahlTeilnehmer; i++) {
teilnehmer[0][i] = datenarray[i].substring(0, datenarray[i].indexOf("@"));
teilnehmer[1][i] = datenarray[i].substring(datenarray[i].indexOf("@")+1, datenarray[i].indexOf(":"));
teilnehmer[2][i] = datenarray[i].substring(datenarray[i].indexOf(":")+1);
}
return teilnehmer;
}
public void setEinstellung(RegistryValue wert) {
this.dn.setValue(wert);
}
public void teilnehmerHinzufuegen(String nickname, String host, int port) {
String trenner = this.getTeilnehmer() == null ? "" : ";";
String kodiert = trenner+nickname+"@"+host+":"+String.valueOf(port);
String bisher = this.dn.getValue("hosts").getData().toString();
RegistryValue neu = new RegistryValue("hosts", bisher+kodiert);
this.dn.setValue(neu);
}
}