List in java.lang.Object... einfügen

Timmorn

Mitglied
Hallo,

das übersteigt im Moment meine Java Kenntnisse und ich weiß auch nicht recht wo nachlesen (wäre auch um Tipp dankbar wo man so etwas lesen kann):

Ich muss folgende Methode aufrufen:

Code:
public void run(Operation pOperation,
                java.lang.Object... images)

Ansich kein Problem, aber ich habe eine variable Menge an images. Diese befinden sich in einer List (ArrayList).

Wie schaffe ich es nun die Elemente dieser List zu übergeben?

Code:
run(Operation pOperation, ArrayList);

funktioniert natürlich nicht. Eine Methode zum übergeben einzelner Bilder (dann könnte ich es mit einer Schleife machen) gibt es leider auch nicht: ImageCommand (The im4java Library)

Danke
Wolfi
 
Eine Methode zum übergeben einzelner Bilder (dann könnte ich es mit einer Schleife machen) gibt es leider auch nicht

Naja, genau genommen könnte man der Methode schon nur ein einzelnes Bild übergeben, würde also funktionieren. Du könntest aber auch auf deiner liste toArray() aufrufen und eben dann das Array übergeben!
 
Vielleicht habe ich noch etwas vergessen, aber ich bin nun gleich weit wie zuvor. Ich habe nach deiner Anleitung

Code:
BufferedImage[] imageArray = (BufferedImage[]) imageListBuffered.toArray(new BufferedImage[0]);

die Liste in ein Array umgewandelt. Nun ist es aber genau wie zuvor:

Code:
cmd.run(op, imageArray[0],imageArray[1]);

funktioniert, aber wie übergebe ich alle Array Elemente unabhängig von der Anzahl an die Methode?
 
Nein, das habe ich versucht und haut in meinem Fall einfach nicht hin. Vermutlich muss ich es genauer beschreiben. Ich übergebe nämlich an letzter Stelle noch einmal einen String. Also so in der Art funktioniert es:

Code:
BufferedImage[] imageArray = (BufferedImage[]) imageListBuffered.toArray(new BufferedImage[0]);
String imageName = "Bild.jpg";
cmd.run(op, imageArray[0],imageArray[1], imageName);

Dieser Code:

Code:
BufferedImage[] imageArray = (BufferedImage[]) imageListBuffered.toArray(new BufferedImage[0]);
String imageName = "Bild.jpg";
cmd.run(op, imageArray, imageName);

wirft hingegen den Fehler:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: [Ljava.awt.image.BufferedImage; is an unsupported image-type

aus.

Ich weiß überhaupt nicht, wie ich das Problem angehen soll 🙁 Würde es vielleicht helfen imageName auch noch hinten an das Array zu hängen? Aber da habe ich Probleme, weil das Array ja schon voll ist.

Danke für die Hilfe!

Danke für die Hilfe.
 
Hi,

wieso hängst du auf einmal noch einen String hinten dran? Die Methode aus deinem ersten Post verlangt
doch nur "images", also das Array. Dafür hat eRaaa dir ja die Lösung gezeigt.
 
Tja wenn du von Anfang an gesagt hättest was du machen willst, hätte man dir auch gleich helfen können... ???:L
Spricht was dagegen, dass du am Anfang
Java:
imageListBuffered.add(imageName)
machst und danach weiter so wie eRaaaa gesagt hat?
 
Ich hänge einen String ran, weil ich es so machen muss. Die Buffered Images sind die Bilder, die von ImageMagick umgewandelt werden müssen und der String ist dann der Dateiname in den die Bilder geschrieben werden.

Spricht was dagegen, dass du am Anfang
Java:
imageListBuffered.add(imageName)
machst und danach weiter so wie eRaaaa gesagt hat?

Ich glaube schon, weil eben imageName ein String ist und die anderen BufferedImage. Oder geht das doch irgendwie?

Ich bekomme so langsam das Gefühl, dass es zwar möglich ist Buffered Images zu übergeben, aber die Klasse nicht wirklich dafür geschrieben wurde. Zu aller Not müsste ich halt die Buffered Images erst auf die Platte schreiben und dann kann ich diese auch als String (eben der Pfad zu den Bildern) übergeben.

Danke für eure Hilfe.
 
Spricht was dagegen ein Objekt zu benutzen?
Java:
class ImageContainer {
  List<BufferedImage> list; // Beinhaltet alle Bilder
  String fileName; // Der Name der Datei
  List<BufferedImage> getImages() { return list; }
}

Dann kannst du einfach das Objekt übergeben:
Java:
void method(ImageContainer ic) {
  for (BufferedImage bi : ic.getImages()) {...}
}
 
Antoras: das geht nicht weil es um einen Method Call einer Library geht.

Timmorn:
Java:
List<Object> objects = new ArrayList<Object>();
objects.add(BufferedImage); // deine bilder (nicht als array!)
objects.add("Foo.jpg");
 
Ich würd sagen, du solltest am besten erstmal nachschaun was für Objekte diese Klasse denn da haben will. Wenn es BufferedImages sein müssen, dann musst du das eine Bild wohl noch einlesen und in deine Liste speichern. Wenn es Dateinamen sein müssen, wirst du nich drum rumkommen die BufferedImages zu speichern (oder eine andere Lib zu verwenden). Wenn beides geht, siehe raiL. Wenns ganz anders is... nochmal schreiben 😉
 
Hi,

ich habe mir die API nochmal angeschaut und ich glaube du kannst den Namen der Dateien über
das Operation-Objekt übergeben. Das hat die Methode:

Code:
addImage

public Operation addImage(java.lang.String... pImages)
    
    Add image(s) to the operation.

oder einzeln:

Code:
addImage

public Operation addImage()

    Add an image-placeholder to an Operation.

Wichtig scheint mir dabei das "placeholder" zu sein, die Doc von ImageCommand.run() sagt ja:

images - Zero or more images (replace placeholders in pOperation)

Dann musst du natürlich darauf achten das die Reihenfolge der Namen mit denen der Bilder übereinstimmt. Aber ich denke das sollte dir erstmal weiterhelfen.
 
Ja, ich habe es nun so geschafft: Ich habe die Datei, die ich per String übergeben muss (@Illuvatar: wie erklärt kann ich es nicht einlesen, da es nicht existiert. Der String ist nur für den künftigen Dateinamen) an den Platzhalter übergeben und dann konnte ich die BufferedImages einfach per Array übergeben.

Danke für eure Tipps!
 

Neue Themen


Zurück
Oben