Java Hilfe

    • warri
      warri
      Bronze
      Dabei seit: 23.04.2007 Beiträge: 1.354
      Hi,
      ich möchte dem Open Source Client eines games eine Funktion hinzufügen, bin aber nicht sehr begabt in Java.
      Die Klasse >Minimap< lädt die Minimaps vom http Server runter und setzt sie ingame zusammen. Ich möchte aber dass die minimaps auf der Festplatte in einem Ordner gespeichert werden sobald sie vom Client geladen werden. Hab jedoch gar keine Ahnung wie ich das machen soll :p

      Die komplette Source gibts bei Bedarf auf http://github.com/Pacho/IRC-Extended

      Zusätzlich hab ich das Problem beim compilen mit ant dass er jede Menge errors ( http://img136.imageshack.us/img136/1290/errorna.jpg )
      ausspuckt, aber bei anderen geht es scheinbar. Hab jedoch die neuste Java und ant version (heute runtergeladen).
  • 4 Antworten
    • xirox
      xirox
      Bronze
      Dabei seit: 05.09.2006 Beiträge: 574
      code:
               while(true) { 
                   String grid; 
                   synchronized(grids) { 
                       grid = null; 
                       for(String cg : loading) { 
                           grid = cg; 
                           break; 
                       } 
                   } 
                   if(grid == null) 
                       break;
      
                   ...
               }

      :heart: :heart: :heart:


      also deine compile "errors" sind ja größtenteils nur warnings und keine fehler. das liegt daran, dass du (ihr) java4 syntax aber einen java6 compiler verwendet. in java4 gab es noch keine typisierungen/generics wie Vector<String>.

      die wirklichen fehler (die ersten 4) sind ja alle derselbe. prüf mal, ob die klasse TextEntry wirklich ein attribut badchars hat und ob das nicht private ist.

      zum speichern von daten auf die festplatte hilft dir die klasse java.io.FileWriter oder java.io.FileOutputStream, je nachdem ob du "normale" zeichen (FileWriter) oder bytes (FileOutputStream) speichern willst. wenn ich deine frage richtig verstehe, willst du bilddaten speichern, sprich bytes. demnach wäre java.io.FileOutputStream die richtige klasse. du instantiierst einfach ein objekt davon mit der gewünschten datei als argument und kannst dann mit hilfe der write(..) methoden deine daten da reinschreiben. die java-api-doc kennst du ja wohl?!
    • warri
      warri
      Bronze
      Dabei seit: 23.04.2007 Beiträge: 1.354
      So?
      FileOutputStream Bild = FileoutputStream(bildname);
      Bild.write(img);
      Wenn ich das an Zeile 100 hinzufüge?
    • xirox
      xirox
      Bronze
      Dabei seit: 05.09.2006 Beiträge: 574
      na so ähnlich... du kannst mit dem fileoutputstream nicht das gesamte objekt auf einmal speichern, sondern nur die bytes. du müsstest aus dem bufferedimage also erst die bilddaten in format eines byte-arrays ermitteln.

      aber so schlecht war das gar nicht... hat mich nämlich darauf gebracht, dass es auch die klasse javax.imageio.ImageWriter gibt, der du das gesamte bild zum speichern übergeben kannst. demnach könntest du folgendes machen:

      code:
      ImageWriter writer = ImageIO.getImageWritersBySuffix(dateiendung).next(); 
      writer.setOutput (new MemoryCacheImageOutputStream (new FileOutputStream (bildname))); 
      writer.write(img);


      .
      .
      .
      .
      .
      .

      und damit es schließlich ganz einfach wird, hat sun das schon für dich so programmiert und in der klasse ImageIO versteckt. die verwendest du ja schon... da gibt es nämlich ne tolle methode static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException die du nur aufrufen musst........ und wenn es dich nicht interessiert, den ganzen kram den ich geschrieben hab, vergessen kannst.

      -> Save Image Tutorial
    • warri
      warri
      Bronze
      Dabei seit: 23.04.2007 Beiträge: 1.354
      Alles klar, das speichern hat schonmal geklappt, danke.
      Allerdings macht es das Spiel mir schwieriger als ich dachte, die einzelnen Bilder sind nur 100x100 pixel anstatt wie ich dachte 1000x1000. Obwohl der Server die Maps an sich in 1000x1000er Schritten erstellt und aktualisiert scheint er sie wohl zu zerschneiden und einzeln zu speichern sodass der client nur die kleinen Stücke zusammensetzt.