SWT-App Загрузка файлов .swf из запускаемого файла .jar или внешней папки - PullRequest
0 голосов
/ 02 сентября 2011

Я программирую, используя библиотеку SWT Widget для Java в eclipse, и разрабатываю работающее Java-приложение.У меня не работает приложение, я просто не знаю, как загрузить внешние файлы .swf из папки на «ВСЕХ» компьютерах.Я могу загрузить изображения с любого компьютера, потому что я использую строку кода getResourceAsStream.Но "import com.docuverse.swt.flash.FlashPlayer" "loadMovie (arg, arg)" принимает только строку.

Так что я сделал ClassName.class.getResource ("blah.swf"). GetPath();который дает вам строку, я ее настраиваю, и, запуская ее при затмении, он может прекрасно найти файл в пакете.Когда я экспортирую его, исполняемый файл Jar, который я создал, не может найти «blah.swf» внутри файла .jar.

Так что есть моя проблема, как мне загрузить мои файлы .swf из .jarили из внешней папки, чтобы клиенты могли загружать вместе исполняемое приложение .jar, чтобы оно могло указывать на эти SWF-файлы.

Спасибо.

1 Ответ

1 голос
/ 09 сентября 2011

Вот как я говорил в комментариях (создание временного файла и сохранение в нем флеш-анимации)

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import com.docuverse.swt.flash.FlashPlayer;

public class SWTFlashPlayer {
    private FlashPlayer player = null;

    private final String FLASH_FILE_PATH = "/EdnCateDance.swf";
    private final String TMP_FILE_PREFFIX = "tmp_";
    private final String TMP_FILE_SUFFIX = ".swf";

    private File swfFile = null;

    public SWTFlashPlayer() {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        try {
            swfFile = copyFileFromJar(FLASH_FILE_PATH, TMP_FILE_PREFFIX, TMP_FILE_SUFFIX);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        player = new FlashPlayer(shell, SWT.NONE);
        player.loadMovie(0, swfFile.getAbsolutePath());
        player.setSize(150, 150);
        player.activate();

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    /**
     * Copy file packed inside current jar to temp file
     * @param jarPath String - path inside jar
     * @param filePreffix String - temp file preffix
     * @param fileSuffix - temp file suffix
     * @throws IOException - temp file cannot be created or writing somehow fails
     */
    private File copyFileFromJar(String jarPath, String filePreffix, String fileSuffix) throws IOException {
        File toFile = File.createTempFile(filePreffix, fileSuffix);
        // delete file after application finishes
        toFile.deleteOnExit();

        if(!toFile.canWrite()) throw new IOException("File (" + toFile.getPath() + ") not exists or is not writable!");

        FileOutputStream fos = new FileOutputStream(toFile);
        InputStream is = this.getClass().getResourceAsStream(jarPath);

        if(is == null) throw new IOException("File on jar path could not be located or loaded!");

        int read = 0;
        byte bytes[] = new byte[1024];
        while ((read = is.read(bytes)) != -1) {
            fos.write(bytes, 0, read);
        }

        fos.flush();
        fos.close();

        return toFile;
    }

    public static void main(String[] args) {
        new SWTFlashPlayer();
    }
}

Я использовал флэш-файл EdnCateDance.swf, который является одним из примеров в библиотеке SWT Flash.

...