Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > bridge


Автор: Platon 9.2.2008, 17:19
Здравствуйте, уважаемые.

Когда встал вопрос с запуском файла с помощью привязанной к нему программы, это не составило труда:
Код

cmd /c "JavaBook.pdf"


Логично, что этот вариант работает тока на Win NT, на 9x другая история, а про Linux вообще никто(беглым взглядом) не знает.
1. Если здраво разобраться в текущем примере, то тут можно все варианты засунуть в 1 код, ибо не так уж и много занимаетнаписать несколько разных команд.

2. Сколько таких ОСозависимых операций встречается в практике?

3. И если реализация не умещается в 3-х строчках, как вы делаете?
первое что приходит в голову:

Есть главный jarник MyProgram.jar, в котором содержатся истинно платформонезависимые операции, в classpath этого джара прописан пать к OSDependend.jar

и вот пример:

MyProgram.jar
Код

public class MainClass {
    public static void main(String[] args) {
                new FileExecuter().execute("1 1.pdf");
    }
}


OSDependend.jar для Win NT
Код

public class FileExecuter {
    public void execute(String filePath) {
    try {
            Runtime.getRuntime().exec("cmd /c \"1 1.pdf\"");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


OSDependend.jar для Win 9x
Код

public class FileExecuter {
    public void execute(String filePath) {
    try {
            Runtime.getRuntime().exec("start.exe \"1 1.pdf\"");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Более того, мы вообще можем сделать эти методы статическими.

Вот собственно и всё. И получается мы можем обойтись без Моста.

Прошу поправить меня и переучить.

Автор: dorogoyIV 9.2.2008, 18:03
Цитата(Platon @  9.2.2008,  17:19 Найти цитируемый пост)
Есть главный jarник MyProgram.jar, в котором содержатся истинно платформонезависимые операции

Platon, не пойму, чего ты хочешь???
все равно ты не сделал прогу, которая будет работать без джава.

Автор: Mayk 9.2.2008, 18:23
А тут нужен bridge? Имхо для этой цели тупо можно сделать какой-нить  properties файл типа
Код

winnt=cmd /c %s
win95=start %s
linux=xpdf %s


и потом делать
Код

String commandLine = props.get( currentOs() );
if( commandLine == null ) throw new RuntimeError( "write handler for your os %s in osdep.properties", currentOs() );
Runtime.getRuntime().exec(  String.format( commandLine, filename ) );

никаких куч .jar'ов.

Цитата(Platon @  9.2.2008,  21:19 Найти цитируемый пост)
а про Linux вообще никто(беглым взглядом) не знает.

в линух нет единой привязки типа файла к приложению.

Автор: Platon 9.2.2008, 18:26
Цитата(dorogoyIV @  9.2.2008,  19:03 Найти цитируемый пост)
которая будет работать без джава. 

А зачем мне без джава?

Я о специфических функциях операционной системы, к примеру: пример, который я привел, извлечение иконки привязанной к файлам определенного типа, открытие браузера по умолчанию и прочее.

Добавлено через 5 минут
Mayk, ваш вариант подпадает под мое утверждение ^_^

Цитата(Platon @  9.2.2008,  18:19 Найти цитируемый пост)
Если здраво разобраться в текущем примере, то тут можно все варианты засунуть в 1 код, ибо не так уж и много занимаетнаписать несколько разных команд.


Но, давайте абстрагируемся от простоты этого примера, и представим, что надо реализовать более сложную задачу, даже не знаю какую ^_^
тогда от нескольких жариков не отвертеться.

Автор: Platon 18.2.2008, 11:24
Вот к примеру, в данный момент не существует единого подхода к извлечению иконок типа файла.
http://forum.vingrad.ru/forum/topic-196605.html

Ясно дело что придется шаманить с разными версиями кода и подключать их.

Автор: w1nd 18.2.2008, 12:52
Platon, в последнем случае я бы решал вопрос с помощью jni.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)