Я попробовал JAI, и это не сработало для меня.
blockquote>Где вы застряли? Работает ли для вас следующее?
import java.io.File; import java.io.FileOutputStream; import java.awt.image.RenderedImage; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import javax.media.jai.NullOpImage; import javax.media.jai.OpImage; import com.sun.media.jai.codec.SeekableStream; import com.sun.media.jai.codec.FileSeekableStream; import com.sun.media.jai.codec.TIFFDecodeParam; import com.sun.media.jai.codec.ImageDecoder; import com.sun.media.jai.codec.ImageCodec; public class Main { public static void main(String args[]) { File file = new File("input.tif"); try { SeekableStream s = new FileSeekableStream(file); TIFFDecodeParam param = null; ImageDecoder dec = ImageCodec.createImageDecoder("tiff", s, param); RenderedImage op = new NullOpImage(dec.decodeAsRenderedImage(0), null, OpImage.OP_IO_BOUND, null); FileOutputStream fos = new FileOutputStream("output.jpg"); JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos); jpeg.encode(op.getData()); fos.close(); } catch (java.io.IOException ioe) { System.out.println(ioe); } } }
Jar-манифест позволяет вам указать не более одного основного класса. Это вызывается, когда вы выполняете java
с флагом -jar
.
java -jar myapp.jar
Вы можете включить несколько основных классов в один jar, но каждый (кроме необязательного 1 выше) должен вызываться с использованием флага -classpath
и с указанием полного имени основного класса.
java -classpath myapp.jar com.mypackage.app.Main01 && \
java -classpath myapp.jar com.mypackage.app.Main02 && \
java -classpath myapp.jar com.mypackage.app.Main03
В приведенном выше примере будут созданы три отдельные виртуальные машины Java, каждая в своем собственном процессе. Очевидно, это не соответствует вашему требованию к «исполняемому банку».
В качестве альтернативы, вы можете захотеть иметь один основной метод, который запускает отдельные потоки, так что существует только один процесс, но одновременное выполнение.
Муравей не подходит для решения этой проблемы. Я подозреваю, что вам, вероятно, нужен единственный основной метод, который порождает несколько потоков. Не стесняйтесь предоставить больше информации о ваших требованиях.
Вы можете создать один основной «главный» класс, который выполняет остальные.
Возможно, я бы придерживался решения MANIFEST, но есть еще одна возможность сделать это:
Process p = Runtime.getRuntime().exec("java -jar another.jar");
Но здесь вы должны быть осторожны с путем и должны правильно завершить процесс, иначе ваша машина может достичь предела для файловых дескрипторов.