Zum Inhalt springen

Sporticus

Mitglieder
  • Gesamte Inhalte

    45
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Sporticus

  1. also, dein Code sieht ja folgendermaßen aus: public static void main(String [] args){ String line; ArrayList<String> array = new ArrayList<String>(); try{ FileReader test = new FileReader("/ip.txt"); //öffnet meine ip.txt Datei BufferedReader in = new BufferedReader(test); //benutzt den BufferedReader um jede Zeile Einzeln aus zu werten for(int i = 0;(line = in.readLine())!=null; i++){ //bügelt also mit einer Schleife drüber array.add(line); //welche solange läuft bis das ende meiner Datei erreicht ist } //die Ergebnisse werden in array.add(line) gespeichert } catch(IOException e){ System.out.println("Pfadangabe Falsch?!"); //falls der Datei-Pfad falsch ist wird hier eine Fehlermeldung ausgegeben } for(int i=0; i < array.size(); i++) { //schleife um zu testen ob der Inhalt angekommen ist [COLOR="seagreen"]// Deinen Code hier einsetzen und die Variable 'list' durch 'array' ersetzen[/COLOR] ProcessBuilder prozess = new ProcessBuilder(new String[] {"ping", [COLOR="red"]array[/COLOR].get(i) }); [COLOR="seagreen"]// TODO ProcessBuilder starten und InputStream anzapfen[/COLOR] System.out.println( array.get( i ) ); } Du kannst ja schließlich nicht auf die Variable 'list' zugreifen, wenn es die gar nicht gibt. Die musst du schon durch die Variable ersetzen, wie du deine List benannt hast.
  2. ok, da hast du natürlich recht. Ich für meinen Teil habe die Lösung allerdings nur so beschrieben, wie sie auch zur Frage gepasst hat. Ich habe halt nicht weitergedacht, da er das eben nicht mehr wissen wollte.
  3. Hi, also ich muss sagen, mit den zwei Lösungen von Dragon und mir ist er schon ganz gut bedient. Er muss die zwei Komponenten dann nur noch zusammenfügen und das wars. Was du vorschlägst 2K1.INC ist zwar auch möglich, klingt aber erstmal schon recht kompliziert. Und wir wollen das Problem ja nicht komplizierter machen, als es eigentlich ist. Oder? Wenn man das alles mal kurz zusammen fast, dann sieht das ungefähr so aus: 1. Datei zeilenweise einlesen 2. Strings vom einlesen in einer List abspeichern 3. ProcessBuilder aufrufen mit "ping " + list.get(xy) und das wars im Grund auch schon
  4. Hi, vielleicht hilft dir ja das weiter: Java: Ping absetzen und Rückgabe einlesen @ tutorials.de: Tutorials, Forum & Hilfe grüße
  5. Hi, ich bin mitlerweile selber auf die Lösung gekommen, nachdem ich mir nochmal die API von den ganzen Sound Klassen angesehen habe. Dabei bin ich auf das Interface Clip gestoßen. Und genau das war die Lösung. Hier nun die Lösung als Code: private AudioClip2 loadAudioClipWAV(File file) { try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); DataLine.Info info = new DataLine.Info(Clip.class, audioInputStream.getFormat()); Clip c = (Clip) AudioSystem.getLine(info); c.open(audioInputStream); c.addLineListener(new ClipLineListener()); AudioClip2 clip = new AudioClip2(file.getName(), c); clips.put(clip.getName(), clip); return clip; } catch (UnsupportedAudioFileException e) { log.error("", e); } catch (IOException e) { log.error("", e); } catch (LineUnavailableException e) { log.error("", e); } return null; } private final class ClipLineListener implements LineListener { /* (non-Javadoc) * @see javax.sound.sampled.LineListener#update(javax.sound.sampled.LineEvent) */ public void update(LineEvent event) { if(LineEvent.Type.STOP == event.getType()) { event.getLine().close(); } } } zum starten der Wiedergabe: clip.loop(count); ...oder... clip.start(); Vielen Dank
  6. hi, ja das mit der mark(int)-Methode hab ich auch schon probiert. An die muss man ja ein int Parameter übergeben, an welcher Stelle man den Stream makieren will. Soweit ich das verstanden hab. Demzufolge müsste ich also schreiben: baseAudioInputStream.mark(0); Allerdings funktioniert das auch nicht (hab ich auch schon ausprobiert), aber wie man aus der Exception lesen kann, kann man entnehmen, dass mark/reset-Funktion nicht unterstützt werden. Die Frage ist jetzt, wie kann ich das aktivieren oder eben einen anderen Weg nehmen, um an die Lösung zu kommen.
  7. Hi Community, ich experementiere momentan mit der Wiedergabe von Sounds via Java (javax.sound.sampled*) rum und bräuchte dabei mal eure Hilfe. Das erzeugen eines solchen Sounds an sich ist nicht weiter schwer, allerdings hab ich es noch nicht geschafft, eine Sounddatei (.wav oder .mp3) erneut wiederzugeben. Hier mal mein aktueller Code. Die Methode, in der das AudioClip Objekt erzeugt wird: private AudioClip loadMP3AudioClip(File file) { try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); AudioFormat baseFormat = audioInputStream.getFormat(); AudioFormat decodedFormat = new AudioFormat( AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false ); DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, decodedFormat); SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); AudioClip clip = new AudioClip(file.getName(), audioInputStream, decodedFormat, sourceDataLine); return clip; } catch (UnsupportedAudioFileException e) { } catch (IOException e) { } catch (LineUnavailableException e) { } return null; } Die Klasse AudioClip, die beim laden einer Sounddatei erzeugt wird: import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; public class AudioClip implements Runnable { private final String name; private final AudioInputStream baseAudioInputStream; private final AudioFormat audioFormat; private final SourceDataLine sourceDataLine; private boolean paused = false; private boolean stoped = false; private boolean muted = false; private int count; /** * @param name * @param audioInputStream * @param audioFormat * @param sourceDataLine * @param dataLineInfo */ public AudioClip(String name, AudioInputStream audioInputStream, AudioFormat audioFormat, SourceDataLine sourceDataLine) { this.name = name; this.baseAudioInputStream = audioInputStream; this.audioFormat = audioFormat; this.sourceDataLine = sourceDataLine; } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { try { sourceDataLine.open(audioFormat); if(count > 0) { for (int i = 0; i < count; i++) { play(); reset(); } } else { while(true) { play(); reset(); } } } catch (LineUnavailableException e) { log.error("", e); } finally { sourceDataLine.drain(); sourceDataLine.stop(); sourceDataLine.close(); IOUtils.closeQuietly(baseAudioInputStream); } } private void play() { try { AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(audioFormat, this.baseAudioInputStream); byte[] tempBuffer = new byte[10000]; sourceDataLine.start(); int cnt; while((cnt = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) { // --- // Stop if(stoped) { return; } // --- // Pause while(paused) { if(sourceDataLine.isRunning()) { sourceDataLine.stop(); } try { Thread.sleep(100); } catch (InterruptedException e) { log.error("", e); } } if(!sourceDataLine.isRunning()) { sourceDataLine.start(); } // --- // Running if(cnt > 0 && !muted) { sourceDataLine.write(tempBuffer, 0, cnt); } } } catch (IOException e) { log.error("", e); } } /** * */ public void mute() { if(muted) { muted = false; } else { muted = true; } } /** * */ public void pause() { if(paused) { paused = false; } else { paused = true; } } /** * */ public void stop() { stoped = true; } /** * */ public void reset() { // TODO } /** * @param count */ public void setPlayCount(int count) { this.count = count; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return name; } /** * @return */ public AudioClip copy() { return new AudioClip(name, baseAudioInputStream, audioFormat, sourceDataLine); } } In der Methode Reset (TODO): Hier soll der Stream zurückgesetzt werden, um ihn erneut wiederzugeben Allerdings bekomm ich bei dem Methodenaufruf von der Methode von AudioInputStream.reset() eine Exception: java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:334) at javax.sound.sampled.AudioInputStream.reset(AudioInputStream.java:410) at de.fh.game.engine.sound.impl.AudioClip.reset(AudioClip.java:174) at de.fh.game.engine.sound.impl.AudioClip.run(AudioClip.java:71) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Meine Frage: Wie kann ich eine Sounddatei erneut wiedergeben, ohne neu in das Programm zu laden? Ich hoffe, dass mir der ein oder andere hoffentlich weiterhelfen kann. Danke
  8. Ok ich hab das Problem gelöst... HIER ein Link zu der Seite, die bei diesem Problem zur Lösung geführt hat Aber drotzdem Danke
  9. Hallo zusammen, ich bin gerade dabei mein Spiel Snake, als Netzwerkspiel (LAN) zu erweitern. Ich kenn mich mit Client-/Serverkommunikation schon relativ gut aus, also ich habe bisher schon ein paar mal was damit gemacht, allerdings nur auf localhost Ebene. Meine Frage ist jetzt: Ist es möglich, dass ein Client die IP des Servers irgendwie ermitteln kann, sodass die Verbindung zu diesem Server aufgebaut werden kann? Und wenn ja wie kann man soetwas umsetzen? (z.B.: Ping?) Ich hoffe Ihr könnt mir bei dem Problemchen weiterhelfen. Danke
  10. Irgendsowas hab ich auch schon fast vermutet, habe aber insgeheim gehofft, dass es auch noch einen "einfacheren" Weg gäbe. Aber drotzdem danke für deine Antwort. Ich werde mir den Link mal ansehen, wenn ich Zeit dafür habe.
  11. Die Lösung zu meinem Problem hab ich auf dieser Seite gefunden, falls mal jemand vor dem gleichen Problem stehen sollte www.torsten-horn.de
  12. Hi zusammen, nachdem ich das Problem, mit dem ClassLoader erledigt habe, steh ich vor einem neuen Problemchen. Ich will mir aus einer Klasse x alle Verbindungen zu den jeweiligen Klassen, Interfaces, Enums (meist unter: import de.bla.bla.Klasse) ausgeben lassen. Mein momentaner Ansatz läuft über das Class Objekt, allerdings habe ich da keine Methode gefunden, die eine solche Funktion zur Verfügung stellt. Ich würde mich freuen, wenn mir da der ein oder andere weiterhelfen könnte. Danke, Sporticus
  13. Guten Morgen, gibt es nicht irgendwelche Open Source Projekte/Programme, bei denen sowas gemacht wird? Dann könnte man sich den Code dort einfach mal ansehen und könnte dann sagen, wie es funktioniert. Ich hab es ja schon einmal angesprochen, dass Eclipse eine Suche verwendet, die auch den Klasseninhalt (Variablen, Methoden) durchsucht und das Ganze im kompletten Workspace. Allerdings könnte es auch sein, dass hier das File einfach geparsed wird.
  14. Mir ist gerade aufgefallen, dass ich im prinzip genau die Funktion brauche, die Eclipse bei der Suche nach einem String (z.B.: enthalten in Methoden, Fields, etc.). Ist nur die Frage, ob bei der Suchefunktion von Eclipse die Datei geparsed wird, oder via den ClassLoader o.ä. geladen wird?
  15. Sporticus

    Java XML Parser

    hi, schau dir mal den Link an. Vielleicht hilft der dir weiter.
  16. Also ich hab mir jetzt nochmal ein paar Seiten im Internet zum Thema "File.class während der Laufzeit zum Classpath hinzufügen" angesehen. Soweit ich das aus meiner jetzigen Sicht sagen kann, ist es nur möglich eine File.jar während der Laufzeit zum Classpath hinzuzufügen. Dieses Beispiel habe ich gefunden, um ein Jar-File in den Classpath mit hinzuzufügen (Website): private static final Class<?>[] parameters = new Class[] { URL.class }; public static void addFile(String s) throws IOException { File f = new File(s); addFile(f); } public static void addFile(File f) throws IOException { addURL(f.toURI().toURL()); } public static void addURL(URL u) throws IOException { URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class<?> sysclass = URLClassLoader.class; try { Method method = sysclass.getDeclaredMethod("addURL", parameters); method.setAccessible(true); method.invoke(sysloader, new Object[] { u }); } catch(Throwable t) { t.printStackTrace(); throw new IOException("Error, could not add URL to system classloader"); } } Ein anderer Lösungsansatz, um ein Jar-File zu laden: (Website) /** * @param args */ public static void main(String[] args) { try { Class.forName("com.google.inject.Injector"); System.out.println("Found"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage() + " not found..."); } addJarsToClassPath(Thread.currentThread().getContextClassLoader(), new File[]{new File("D:/stuff/google/guice/1.0/guice-1.0.jar")}); try { Class.forName("com.google.inject.Injector"); System.out.println("Found"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage() + " not found..."); } } private static void addJarsToClassPath(ClassLoader classLoader, File[] jars) { if (classLoader instanceof URLClassLoader) { try { Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class }); addUrlMethod.setAccessible(true); if (null != addUrlMethod) { for (File jar : jars) { try { addUrlMethod.invoke(classLoader, jar.toURI().toURL()); } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } } } In meinem Fall hat keines der beiden Beispiele funktioniert. Wenn ich eine ClassNotFoundException bekomme, vermute ich mal, dass die Klasse dann nicht im Classpath liegt. Kann ich diese Klasse denn dann nachträglich noch in den Classpath mit aufnehmen?
  17. Das hab ich als aller erstes schon versucht. Das hat allerdings auch nicht funktioniert. Meine Vermutung: Da die Datei.class nicht in dem gleichen Projekt liegt, in dem das Programm ausgeführt wird, muss ich den vollständigen Pfad zu dieser Datei.class angeben. Was ich gerade noch ausprobiert habe: InputStream in = null; try { in = new FileInputStream(jarFile); // File über den FileInputStream einlesen?! if(in != null) { List<Integer> byteList = new LinkedList<Integer>(); int oneByte = 0; while((oneByte = in.read()) != -1) { byteList.add(new Integer(oneByte)); } byte[] data = new byte[byteList.size()]; for(int index = 0; index < byteList.size(); index++) { data[index] = byteList.get(index).byteValue(); } Class<?> defineClass = defineClass(StringUtils.removeEnd(jarFile.getName(), ".class"), data, 0, data.length); } } catch(IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(in); } Danach bekomm ich dann eine NoClassDefFoundError... Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: de/test/Test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.lang.ClassLoader.defineClass(ClassLoader.java:466) ...
  18. Hi, ein weiterer Lösungsweg: public static void lesenCopybookFile(){ pfad = Test_JGui.getUrlCopybook(); pfad = pfad.replace("\\","/"); i = 0; copybook = new String[1][8]; row_cache = new String[8]; try { lese = new BufferedReader(new FileReader(pfad)); while((row = lese.readLine()) != null) { row = row.replaceAll("\\s+", ";"); row_cache = row.split(";"); for(int x = 0; x < 8; x++){ // <-- Wenn x kleiner 8 bleibt, dann geht das auch copybook[i][x] = row_cache[x]; } i++; } lese.close(); } catch (IOException e) { e.printStackTrace(); } for ( Object elem : copybook ) System.out.println( elem ); }
  19. Hi flashpixx, danke ersteinmal für deine schnelle Antwort. Die Seite, die du mir gezeigt hast, hab ich auch schon einmal gefunden, allerdings dabei nur überflogen. Ich habe jetzt versucht das, was auf dieser Seite steht, umzusetzen. Mein Code sieht momentan so aus: public class JarClassLoader extends ClassLoader { /** * @param jarFile - enthält Pfad zur *.class Datei: C:\Beispiel\Beispiel.class * @param binaryClassName - Format: java.lang.ClassLoader * @return * @throws ClassNotFoundException */ public Class<?> loadClass(File jarFile, String binaryClassName) throws ClassNotFoundException { // --- // lesen über den ClassLoader Class<?> findLoadedClass = findLoadedClass(binaryClassName); if(findLoadedClass != null) { return findLoadedClass; } // --- // lesen über den InputStream byte[] data = readClassFromFile(jarFile, binaryClassName); if(data == null) { throw new ClassNotFoundException(binaryClassName); } // --- // Class definieren Class<?> defineClass = defineClass(binaryClassName, data, 0, data.length); System.out.println(defineClass.getName()); return defineClass; } private byte[] readClassFromFile(File jarFile, String binaryClassName) { String fileName = jarFile.getAbsolutePath(); InputStream in = getClass().getClassLoader().getResourceAsStream(fileName); if(in != null) { try { List<Integer> byteList = new LinkedList<Integer>(); int oneByte = 0; while((oneByte = in.read()) != -1) { byteList.add(new Integer(oneByte)); } byte[] data = new byte[byteList.size()]; for(int index = 0; index < byteList.size(); index++) { data[index] = byteList.get(index).byteValue(); } return data; } catch(IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(in); } } return null; } } Allerdings bleibt die ClassNotFoundException erhalten Vielleicht bin ich auch einfach so auf den Code fokusiert, dass ich meinen Fehler einfach übersehe. Aber vielleicht hat einer von euch einen besseren Blick darauf.
  20. Sporticus

    Roboter in BlueJ

    Hi, dein Code ist sehr übersichtlich, was immer gut ist! Aber zu verbessern gibt es schließlich immer etwas: 1. versuche deine Klassen-Variablen immer private und am besten noch mit final zu machen. Das hat den Vorteil, dass die Variablen nach der Definition nicht mehr verändert werden können. Weder ausversehen noch sonst wie. 2. Wenn du Componenten zum Applet hinzufügen willst, musst du nicht zwingend getContentPane().add(...) schreiben, sondern kannst auch direkt add(...) machen 3. du könntest, um die Sache noch ein bischen abzurunden das g.fillRect... und g.drawRect... in jeweils eine Methode auslagern. (ist nicht zwingend notwendig, aber du kannst dir ein paar (ca. 80) mal das xPos+..., yPos+... sparen ) hier mal eine kurze Codevorstellung von meiner Seite: [U]zu 1.:[/U] private final Roboter robbil; private final Button btnLinks; private final Button btnRechts; [U]zu 2.:[/U] public void init() { ... setLayout(null); ... add(btnLinks); ... } [U]zu 3.:[/U] private void drawRect(Graphics g, int width, int height, int x, int y) { g.drawRect(xPos+width,yPos+height,x,y); } ... das gleiche für fillRect... Ich hoffe ich konnte dir ein paar nützliche und hilfreiche Tipps geben. Sporticus
  21. Hi Community, ich bin noch ganz neu hier und habe mich zu meinem momentanem Problem schon mal ein wenig umgesehen, allerdings keine Lösung gefunden (weder hier noch bei Google). Ich programmiere mir momentan ein Programm, welches anhand von Java-Klassen ein Klassen-UML-Diagramm erstellen soll. Das erstellen und pipapo funktioniert einwandfrei. Allerdings steh ich noch vor dem Rätsel, wie ich eine class aus einem x beliebigen Projekt/Ordner/etc. laden kann und in meinem Programm verwenden kann. (Ich kann das Programm nur auf Klassen aus dem aktuellen Projekt laufen lassen) Bisher hab ich es probiert, die x beliebige Klasse über den ClassLoader zu laden, allerdings hab ich festgestellt, dass dieser nur Klassen aus dem aktuellen Projekt laden kann! Ich würde mich über ein paar Anregungen, Vorschläge, etc. sehr freuen. Danke

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...