Zum Inhalt springen

speedi

Mitglieder
  • Gesamte Inhalte

    813
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von speedi

  1. Was ist eigentlich euere Meinung zur Aufgabe 2.12? Meiner Meinung nach erfüllt diese in keinster Weise die Anforderungen, welche man an Prüfungsfragen stellen sollte. Welcher Compiler läuft denn bitte in der Standard-Konfiguration sauber durch, wenn die benötigten Librarys noch nicht verlinkt sind? Welcher Entwickler coded sein Programm erstmal fertig bevor er die benötigten Librarys einbindet? Und was soll dass mit: "Programm ausführen" und Programm in Hauptspeicher laden. Ist das aus sicht des Computers gemeint, oder aus Sicht des Entwicklers? Der Entwickler sagt seiner IDE oder dem OS, dass das Programm ausgeführt werden soll. Aufgrund dessen wird danach das Programm geladen. Und danach ausgeführt. Je nach Sichtweise, wäre da beides nicht falsch oder richtig. Meiner Ansicht nach gehört dieser Bockmist gestrichen. Die Musterlösung ist für mich auch nach dem zehnten mal durchdenken noch nicht nachvollziehbar. [Nachtrag] Die Musterlösung trifft bestenfalls auf Entwicklung unter C,C++ zu. Aber soweit ich weiß ist die Ausbildung zum Fachinformatiker Anwendungsentwicklung doch eher Programmiersprechenneutral bzw. Java affin gehalten.
  2. speedi

    Java Steuerung (KeyListener)

    KeyPressed wird in bestimmten Intervallen gerufen, solang der Knopf gedrückt ist. Entweder knüpfst du also deine Bewegung ganz direkt an dieses Event und bewegst deine Figur direkt über den KeyListener oder du musst auch noch das KeyReleased auswerten um die Bewegung ggf. zu stoppen - z.B. wenn die im Programm entsprechende Nebenläufigkeiten hast.
  3. speedi

    Java vor JavaFX lernen?

    Kommt ganz drauf an wie die Aufgaben aussehen. Wenn du nur mit SceneBuilder ein paar FX-Oberflächen ohne Funktion erstellen sollst brauchst du kein Java dafür. Um diese Oberflächen dann aber mit Leben zu fülllen - dafür zu sorgen dass etwas passiert, wenn du auf einen Button blickst oder ähnliches wirst du um Java nicht herumkommen.
  4. speedi

    Serverlogik

    Da müsste man jetzt dein Protokoll detaillierter kennen. Wenn deine Datenrate recht hoch ist und du Text-Basiert arbeitest kann es natürlich sein, dass das Parsing etwas performance frisst. Was auch sein kann: Sockets buffern. Das heißt Daten werden nicht unbedingt in dem Moment geschrieben, in dem du sie in den OutputStream des Sockets ballerst. Wenn du willst, dass sicher gesendet wird kannst du ein stream.flush() machen. Ich persönlich würde bei UDP mit festen Sende-Raten arbeiten - da ja durchaus mal was verloren gehen kann und du keine Empfangsbestätigung hast. Auch würde ich schauen, dass die Packet möglichst klein sind. Letzte Anmerkung: Wenn ihr die akzeptierten Sockets des Servers von einem ThreadPool bearbeiten lasst, könnte es passieren, dass ihr im Threadpool bei vielen gleichzeitigen Verbindungen irgendwann keine freien Threads mehr habt. Wenn ihr also nicht aktiv dafür sorgt (z.B. durch nicht-blockierendes lesen) dass ein Thread wieder frei wird, habt ihr irgendwann ein Problem. Ich habe bei sowas bislang immer einfach für jede Verbindung wirklich einen eigenen Thread gemacht - ist aber vielleicht auch nicht die beste Lösung.
  5. Du könntest - wenn du bei null-layout bleiben willst - die doLayout()-methode deines JFrames überschreiben und die Bounds der Komponenten dort setzen. Wenn du es ganz einfach machen willst errechnest du einen Faktor um den die Auflösung gestreck wird, setzt dann deine Standard-Bounds, holst dir danach die Componenten vom JFrame und verzerrst die Bounds um diesen Faktor. Das ist vielleicht (oder auch sicher) nicht ganz sauber und kein best practice, aber du solltest damit deine derzeitige Software mit überschaubaren Aufwand anpassen können. Die Schriftgröße, kannst du genau so anpassen. float faktor = 1.5f; JTextField tf = new JTextField(); tf.setFont(tf.getFont().deriveFont(faktor*tf.getFont().getSize()));
  6. Ohne es jetzt genau zu wisen würde ich sagen: Mit Java-Boardmitteln wird das eher nicht gehen. Vor allem dann nicht, wenn das Fenster zu einem anderen Prozess gehört. Wenn du diesen Mechanismus jedoch innerhalb deines Programmes verwenden willst solltest du dir auch mal über andere Varianten Gedanken machen. Anonsten könntenst du auch versuchen erstmal zu analysieren in welchem Zustand das Fenster ist (pixel-vergleich auf der Taskleiste). Auf die Weise hab ich mal tausendfach Schnitzel auf lokalisten.de eingesammelt^^
  7. Ich nutze zum erstennen von XSDs eigentlich ganz gern speziellere Tools. Sprich sowas wie XML-Spy oder Eclipse-Link (JAXB). Damit brauchst dich mit solchen Problemen gar nicht erst rumschlagen. Mit Link lassen sich dann auch die Sourcen fürs Binding per 3-Mausklicks erzegen.
  8. Du bist vielleicht hart drauf^^ Kannst du überhaupt irgendwas, was mit programmieren oder vielleicht Java zu tun hat? Ich versuchs trotzdem mal. import javax.swing.*; public class MessVer2{ // Initialisierung von Variablen. // Alle Variablen die man hier sieht sind als private und static initialisiert. // private bedeutet du kannst auf diese Variable nur innerhalb dieser Klasse zugreifen. Von einer anderen Klasse aus // ist die Variable nicht sichtbar. // static bedeutet das diese Variable nicht an eine Instanz dieser Klasse gebunden ist. Sondern für alle Instanzen die // selbe Variable benutzen. Man benötigt nicht mal eine Instanz der Klasse sondern kann direkt über die Klasse selbst // auf die Variable zugreifen. // int ist ein Datentyp. Steht für Integer. Also ganze Zahlen. Positiv wie negativ. 32bit. Wertebereich von -2^31 bis // 2^31 // "wer" ist der name der Variablen. Der Zugriff im programm erfolgt über diesen Namen. private static int wer = 0; // double ist ein Datentyp für Gleitkommazahlen mit doppelter Genauigkeit. [] Gibt an das es sich um ein Array // handeln soll private static double [] ar; // String hat nichts mit Unterwäsche zu tun - sondern ist ein komplexer Datentyp, welcher eine Zeichenkette // beliebiger Länger aufnehmen kann. private static String strAusgabe = ""; private static String strsAusgabe = ""; private static int ln; // Das ist eine Methode. Spricht ein programmbaustein den man aufrufen kann. // public bedeutet, dass diese Methode von überall aus aufgerufen werden kann. static bedeutet dass gleiche wie // oben auch // void ist der Rückgabetyp. Jede Methode hat so einen. Er steht immer vor dem Methodennamen. void ist ein // Datentyp der eigentlich keiner ist. Es bedeutet "nichts!". D.h. man braucht auch kein return. public static void array (){ // JOptionPane ist eine Klasse aus dem Swing-Framework (für grafische Oberflächen). Sie bietet Schnittstellen zum // einfachen erstellen von Dialogen. Mit der Methode showInputDialog wird ein Eingabe-Dialog erstellt und // angezeigt. Nachdem der Benutzer die Eingabe abgeschlossen hat gibt die Methode einen String zurück. // Integer.parseInt ist eine Methode welche eine String (also eine Zeichenkette) zu einer Zahl umrechnet mit der // der Computer rechnen kann. // "ln =" weist der Variable ln den Rückgabewert der parseInt-Methode zu. ln = Integer.parseInt(JOptionPane.showInputDialog(null, "Bitte geben sie die Anzahl der Werte an!")); ar = new double[ln]; } // ____________________Probiers ab hier mal selbst____________________ public static void eingabe(){ if (ln >0) { for (int i=0; i<ar.length; i++) { String strWert= JOptionPane.showInputDialog(null, "Messwert "+ +(i+1) +" von "+ar.length+" eingeben"); double wert= Double.parseDouble(strWert); ar[i] = wert; } } else { meldung(); } } public static void meldung(){ JOptionPane.showMessageDialog(null, "Sie haben noch kein Array erstellt!", "Error", JOptionPane.ERROR_MESSAGE); } public static void kleinsterwert(){ if (ln >0) { double kwrt = ar[0]; for (int i=1; i<ar.length; i++) { if (kwrt > ar[i]) { kwrt = ar[i]; } } JOptionPane.showMessageDialog(null, "Der kleinste Messwert beträgt: "+kwrt); } else { meldung(); } } public static void größterwert(){ if (ln >0) { double gwrt = ar[0]; for (int i=1; i<ar.length; i++) { if (gwrt < ar[i]) { gwrt = ar[i]; } } JOptionPane.showMessageDialog(null, "Der kleinste Messwert beträgt: "+gwrt); } else { meldung(); } } public static void ausgabe(){ if (ln >0) { for (int i=0;i<ar.length;i++) { strAusgabe = strAusgabe + Double.toString(ar[i]) + "\n"; } JOptionPane.showMessageDialog(null, "Messewerte:\n\n" + strAusgabe); strAusgabe = ""; } else { meldung(); } } public static void durchschnitt(){ if (ln >0) { double sum = 0; for (int i=0 ; i<ar.length; i++ ) { sum += ar[i]; } double dr = (sum/ar.length); dr = Math.round(dr*100.00)/100.00; JOptionPane.showMessageDialog(null, "Der durchschnitt beträgt: " + dr); return; } else { meldung(); } } public static void sortierung(){ for (int i=0 ; i<ar.length-1; i++ ) { double temp; int min = i; for (int j=i+1;j<ar.length ;j++ ) { if (ar[j] < ar[min]){ min = j; } temp = ar[min]; ar[min] = ar[i]; ar[i] = temp; } } } public static void main (String[]Args){ while (true) { char input; input = JOptionPane.showInputDialog(null, "*****Hauptmenü***** \n Z = Anzahl der Messungen eingeben \n B = Programm beenden \n \n").charAt(0); switch (input) { //case 'e' : case 'E' : eingabe(); break; case 'a' : case 'A' : ausgabe(); break; case 'z' : case 'Z' : array(); eingabe(); break; default : JOptionPane.showMessageDialog(null, "Falsche eingabe. \nBitte versuchen sie es erneut!", "Error", JOptionPane.ERROR_MESSAGE); } if (ln>0){break;} } // end of while while (true) { char input; input = JOptionPane.showInputDialog(null, "*****Hauptmenü***** \n Z = Anzahl der Messungen eingeben \n E = Eingabe \n A = Ausgabe \n D = Durchschnitt \n K = Kleinster Wert \n G = Größter Wert \n S = Sortierung \n B = Programm beenden \n \n").charAt(0); switch (input) { case 'e' : case 'E' : eingabe(); break; case 'a' : case 'A' : ausgabe(); break; case 'z' : case 'Z' : array(); eingabe(); break; case 'd' : case 'D' : durchschnitt(); break; case 'k' : case 'K' : kleinsterwert(); break; case 'g' : case 'G' : größterwert(); break; case 's' : case 'S' : sortierung(); ausgabe(); break; case 'b' : case 'B' : System.exit(1); break; default : JOptionPane.showMessageDialog(null, "Falsche eingabe. \nBitte versuchen sie es erneut!", "Error", JOptionPane.ERROR_MESSAGE); } } } }
  9. File f = new File("meineDateiImProgrammverzeichnis.bla"); f.rename(new File("blbubOrdner/"+f.getName())); "Aber es gibt tatsaechlich auch File.copy hat mir nur nicht gefallen, weil man Pfade angeben muss." ?? Muss man beim verschieben nicht immer Pfade angeben? Relativ oder Absolut sollte beides gehen.
  10. speedi

    String-Formel berechnen

    Ich sehe das wie flashpixx. Es gäbe auch noch die Variante mit dem String automatisch Java-Sourcecode zu erzeugen, zu kompilieren und auszuführen. Aber so richtig schön ist das nicht.
  11. Bis vor kurzem ("bis das der Rost uns scheidet") Hersteller: Opel Modell: Vectra A Fahrzeugtyp: Limousine Baujahr: 1992 Leistung: 90 PS Farbe: Marsaille-Rot Metallic Laufleistung: ca. 135.000km nebenbei: Hersteller: Suzuki Modell: SV 650 S Fahrzeugtyp: Motorrad Baujahr: 2004 Leistung: 72 PS Farbe: Metallic-Schwarz Laufleistung: ca. 25.000 km bald (sobald geliefert): Hersteller: Ford Modell: Focus 1.0 EcoBoost Fahrzeugtyp: Limousine (5-Türer) Baujahr: 2012 Leistung: 125 PS Farbe: Panther-Schwarz Laufleistung: 0km
  12. Für mich ist Software der gesamte "geistige Inhalt" eines IT-Systems. Ich eine Textdatei ist für mich irgendwo Software. Ein Programm ist für mich eine Software mit intelligenz. Also etwas, was etwas tun kann. Eine Worddatei tut nichts selbst - Word macht etwas mit ihr. Was das Beispiel mit Office angeht. Office ist gesamtheitlich gesehen eine Software oder genauso gesagt eine Sammlung von Programmen. Aber jedes einzelne Programm ist auch eine Software. Lustige Diskussion irgendwie.
  13. Spontan würde ich vorschlagen: Dekompilieren und in Packages packen.
  14. Das ist eigentlich nicht so schwer. Zum einen startest du einen Thread (z.B. class MyFileObserver) der in regelmäßigen abständen schaut ob sich der Timestamp der Datei geändert hat. In dieser Klasse, welche die Datei überwacht gibt es dann eine Liste mit ChangeListenern (entsprechende addChangeListener und removeChangeListener- Methoden müsstest du dann natürlich auch implementieren. Wenn sich dann der Timestamp der Datei ändert iterierst du über die Liste und rufst von jedem Changelistener die stateChanged-methode mit einem ChangeEvent dem du als Source das File-Objekt übergibst. Letztendlich kannst das Event dann in etwa so Abfangen: MyFileObserver fileObserver = new MyFileObserver(file); fileObserver.addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent event){ // potentiell unsicher durch fehlenden TypeCheck File f = (File)event.getSource(); // Neu laden der Datei load(f); } }); Der FileObserver könnte in etwa so aussehen: import java.io.File; import java.util.LinkedList; import java.util.List; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class FileObserver extends Thread { private File mFile; private boolean mRunning = true; private long mTimeStamp; private List<ChangeListener> mChangeListeners = new LinkedList<>(); public FileObserver(File file) { super(FileObserver.class.getCanonicalName() + ": " + file.getAbsolutePath()); this.mFile = file; this.mTimeStamp = file.lastModified(); start(); } public void addChangeListener(ChangeListener listener) { synchronized (mChangeListeners) { mChangeListeners.add(listener); } } public void removeChangeListener(ChangeListener listener) { synchronized (mChangeListeners) { mChangeListeners.add(listener); } } public void stopObserving() { mRunning = false; interrupt(); } @Override public void run() { while (mRunning) { long timeStamp = mFile.lastModified(); if (timeStamp != this.mTimeStamp) { notifyFileChanged(); mTimeStamp = timeStamp; } try { Thread.sleep(1000); } catch (InterruptedException e) {} } } private void notifyFileChanged() { ChangeEvent changeEvent = new ChangeEvent(mFile); synchronized (mChangeListeners) { for (ChangeListener changeListener : mChangeListeners) { try { changeListener.stateChanged(changeEvent); } catch (Throwable e) { e.printStackTrace(); } } } } } Hinweis: Der Thread im beispiel läuft solang weiter bis du durch aufrufen der Methode stopObserving() den Spaß beendest. Tust du das nicht verschwendest du ressourcen. Du kannst es auch so machen, dass die Schleife unterbrochen wird, sobald sich die Datei geändert hat. Aber so hätte es den Vorteil, dass der Benutzer mit Nodepad++ auch 1000x speichern kann und du lädst immer automatisch neu.
  15. Wenn du weißt wie die Datei heißt könntest du über myFile.lastModified das Datum der letzten Änderung abfragen. Lass doch einen Thread laufen der regelmäßig prüft, ob die Datei geändert wurde und ggf. diese neu einließt. Andere Möglichkeit: Runtime.getRuntime().exe(...) liefert dir ein Process-Objekt zurück. Von diesem könntest du dir den InputStream holen und versuchen zu lesen (da kommt wahrscheinlich nichts drüber rein, ist aber auch egal), denn sobald Notepad++ wieder geschlossen wird solltest du eine IOException bekommen oder anderweitig einen Fehler. Sobald der auftritt weißt du dann: Ok... Notepad++ geschlossen => datei neu laden.
  16. Das ist im Grunde was ich wollte. Ich bin zwar schon am googlen, aber weißt du vielleicht auf die schnelle wie man sich einen Socket holen kann, den ein anderes Programm bereits erzeugt hat? Ich dachte ich lasse ein Programm im Hintergrund laufen welches die UDP-Daten liest und dann via TCP auf dem Rechner an die einzelnen Programme verteilt. Pipes gehen ja nur Software-Intern - oder? - deshalb TCP. Dann hängt sich die jeweilige Software an den TCP-Server und bekommt die UDP-Messages über den Stream (message-Length als int und dann die eigentliche message. d.h. ich kanns genau so behandeln wie ich es vorher vor hatte und muss nur minimale Änderungen machen). Also gehen Pipes doch auch Programm-Übergreifend... ok, ich schaus mir an.
  17. Was ich niemals vor hatte: (weil ich denke dass das einige denken) Niemals wollte ich das innerhalb einer Software mehrere Komponenten ihren eigenen Socket erzeugen und darauf Daten abgreifen die andere Komponenten auch schon verarbeiten. Sowas wäre in der Tat ziemlicher Blödsinn. Aber jede eigentständige Software muss natürlich ihre Daten irgendwoher bekommen. Und rein mit Listenern ist mir da einfach nicht geholfen. Damit kann ich ja lediglich Daten verteilen die schon da sind.
  18. Ich verfolge jetzt folgende Lösung: Ich habe einen simplen UDP-Receiver/TCP-Server der bei Start des Rechners gestartet wird. Wenn ein Packet ankommt lege ich das auf einen Stack und der TCP-Server verteilt dann die empfangenen Daten an die Clients (Karte/Videoviewer/StatusView). @Flashpix: Es handelt sich bei den UDP-Daten um Broadcast-Daten später auch Multicast. Nochmal: Die Daten werden Software-Intern nach Oberserver-Pattern verarbeitet. Im Detail bedeutet, dass der jetzige UDP-Receiver (in Zukunft ein TCP-Client) empfängt die Daten und legt sie auf einen Stack. Die Daten auf dem Stack werden dann von einem Thread entspack, in Objekte gewandelt und dem Eventbus übergeben. Wenn eine Komponente nun eine Message empfangen will meldet sie sich am Eventbus an und bekommt ihre Daten um damit zu machen, was immer sie möchte. Ursprüngliches Problem nochmal genauer erklärt Stellt euch einfach vor ihr habt einen TV Empfänger (nur ein Kanal!) und Empfangt alle Daten auf einem UDP-Port (Broadcast). Da muss zum einen das Video angezeigt und zum anderen der Videotext (der in die Videodaten anhand der Pixeldaten mit reinkodiert ist). Es ist nun aber gefördert, dass diese zwei Teilkomponenten nicht in einer einzigen Software laufen sondern getrennt (unterschiedliche Prozesse!! "unabhängige ausführbare Jar-Files". Deshalb dachte ich das einfachste wäre, wenn es einen Receiver gibt den sowohl Videotext als auch TV-Anwendung als API verwenden um sich daraus die benötigten Daten zu ziehen. Ich brauche nicht unbedingt nachhilfe in Software-Architektur - ich wollte lediglich wissen ob/wie es möglich ist das beide die Daten empfangen. Wenn beide auf unterschiedlichen Rechnern laufen geht das ja auch stressfrei. Naja... jetzt hab ich ne Lösung - wenn auch nicht so simpel wie ich es gern gehabt hätte. In meinem Fall kommt es schon vor das zwei Anwendungen die gleichen Daten brauchen um ihre Ergebisse zu errechnen. Im Detail kann ich darauf aber nicht eingehen. @Crash: Die Idee mit den dynamischen Ports ist nett. Da könnte ich einfach anweisen, dass eingehende Messages auf Port 1987 repeatet werden auf localhost:1988 für Map, localhost: 1989 für Video etc... Aber ich denk ein TCP-Server der auf einem festen Port verbindungen entgegen nimmt und lokal läuft erfüllt den gleichen Zweck und jeder Client kann sich an und abmelden ohne dass ich erst irgendwelche Portnummern aushandeln muss. Danke auf jeden Fall schonmal an alle. Ich bin mal gespannt, was der PL sagt wenn er wieder da ist - der meinte ja das wäre kein Problem^^
  19. @carstenj: Zu netstat: UDP [::]:1987 *:* UDP [::]:1987 *:* UDP [::]:1987 *:* UDP [::]:1987 *:* Das erscheint mir eigentlich schon so als würden da 4 Programme auf 1987 lauschen. Ich habe keine Adresse angegeben in dem Fall - also ist egal wo es her kommt. Aber auch wenn ich das tue ist der Effekt der gleiche. __________________________ @SilentDemise Mir kommts mittlerweile vor als hättest du recht. Der Projektleiter meinte halt nur es würde gehen und sei Sache des UDP-Stacks im Betriebssystem. Leider ist der zur Zeit nicht da. __________________________ @afo Das aufteilen werde ich jetzt wahrscheinlich auch tun. Ich lasse die Daten zentral ankommen und verteile sie dann über einen kleinen TCP-Server. __________________________ @lilith2k3 Der von dir gepostete Text ist eine Beschreibung zu TCP damit wäre das Problem gar nicht da. Natürlich trenne ich in der Software GUI und Empfangsteil. Das Observer-Pattern ist mir ein Begriff und findet auch Verwendung. Die Sache ist im Grunde die: Ich bekomme verschiedene Daten von einem Mobilen System auf einem Port (definierte Messages). Diese sollen auf einen Rechner mit mehreren Bildschirmen in verschiedenen Programmen angezeigt werden. z.B. Ein Programm zur Anzeige der Position auf einer Karte. Ein Programm zur Anzeige von Viodeobildern. Ein Programm zur Anzeige von Statusdaten. Daher braucht natürlich jedes Programm die Daten. Ich hätte das ganze am liebsten in einem Programm gemacht - welches halt einfach mehrere Frames hat. Aber leider ist das so eine Vorgabe gegen die ich mit sachlicher Argumentation nicht ankomme. Es ist nicht direkt die gleiche Software die da paar mal läuft, aber es ist eben der gleiche Receiver der die gleichen Daten braucht.
  20. Sind hier eigentlich alle so hilfreich? Ich weiß durchaus wie ein UDP-Header ausschaut, aber inwieweit hilft das bei der Lösung des Problems?! Ich implementiere auch nicht zum ersten mal einen UDP-Reader, aber diesmal gibts halt eine neue Anforderung von der ich nicht weiß, ob/wie das möglich ist. Ich hatte eigentlich gehofft irgendwer hätte hier einen entscheidenden Tipp. Aber das war wohl nichts. So funktionieren Foren wirklich super^^ Derzeitiger Status DatagramSocket mSocket = new DatagramSocket(); mSocket.setReuseAddress(true); mSocket.bind(new InetSocketAddress(mPort)); Damit lassen sich jetzt beliebig viele Sockets instanzieren, die auch - scheinbar - alle auf den Port lauschen. Leider bekommt nur der Socket der zuerst instanziert wurde Daten. Ich habe auch versucht noch eine IP-Adresse mit anzugeben, aber das nutzt auch nichts - immer nur der erste bekommt etwas.
  21. Danke dir. Gegoogelt habe ich schon. Das man an ein interface bindet ist mir schon klar. Weißt du, ob das was ich vor habe generell Möglich ist - oder geht das nicht? Hast du vielleicht noch weitere Brotkrumen die mir weiterhelfen könnten?
  22. Der Kunde will, dass die Software mehrfach lauft und die Daten welche über einen bestimmten UDP-Port reinkommen in jeder Instanz angezeigt werden. Wenn das nicht möglich ist die Daten in mehreren Prozessen gleich zu lesen, müsste ich quasi einen Master-Receiver schreiben, der die Daten dann z.B. über einen TCP-Server an die einzelnen Prozesse verteilt. Ich hatte gehofft mir das sparen zu können.
  23. DatagramSocket mSocket = new DatagramSocket(null); mSocket.setReuseAddress(true); mSocket.bind(new InetSocketAddress(mPort)); Ok... wenn ich den Socket mit null instanziere gehts schonmal bisschen weiter. Leider bekommt der zweite Prozess jetzt keine Daten. Der erste frisst alles weg.
  24. Hallo, ein Programm schreiben, welches auf einen Datagram-Socket lauscht und die Daten visualisiert. Das Programm soll mehrfach geöffnet werden können (Kundenanforderung). Eigentlich dachte ich mir: ok, dann setze ich den Socket setReuseAdress(true) und fertig. Leider bekomme ich dennoch BindException (Adress already in use). Ein Kollege meinte man müsse erst setReuse(true) machen und dann binden - im nachhinein ginge da nicht. Ok... das wollte ich nun ausprobieren und da sagt mir der socket schon gebunden ist. DatagramSocket mSocket = new DatagramSocket(); mSocket.setReuseAddress(true); mSocket.bind(new InetSocketAddress(mPort)); Hab auch schon versucht mit disconnect vor dem bind => hilft nichts.
  25. Eine SSD besteht aus Flash-Speicher (EEPROM). Diese Chips wiederrum bestehen aus vielen Schaltungen - viele viele Transistoren. Und was ist ein Transistor? Ein Halbleiterelement (Halbleiter-Triode). Du schwimmst mit deinen Temperatur-Überlegungen mit recht hoher Sicherheit in die komplett falsche Richtung. Das ist nicht der Ansatzpunkt für ein Referat über Halbleiter und SSDs. Das interessante bei Halbleitern ist in Bezug auf die EDV die Eigenschaft, dass die Polarisierung (Fließrichtung des Stroms) entscheidend ist ob sie leiten oder nicht.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...