Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программирование под MacOS 
V
    Опции темы
Samotnik
Дата 12.10.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Привет, может у кого-нибудь есть ссылки, статьи, документация.
Программирование под Mac OS на Java
Интересует именно взаимодействие Java с самой операционкой. Т.е. как средствами Java достучаться до ядра, как запустить прогу, как просмотреть список установленных прграмм, путь к ним и  т.д. 
 smile   smile 
PM MAIL   Вверх
Skynin
Дата 12.10.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Jna version 3.0.5 - How to Download and Install on Mac OS X

Хотя вроде уже и так поддерживается - JNA

Либо более классический но муторный - JNI, придется на Object C или чем там под маками писать.

Это сообщение отредактировал(а) Skynin - 12.10.2009, 16:18
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Samotnik
Дата 12.10.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Skynin, спасибо, но я этого и боялся  smile 
т.е. на  pure Java нельзя с Маками работать ?
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Skynin, быть может, Вы дадите ссылку на пример, где с помощью JNA можно получить путь к установленной программе на MacOS ?
PM MAIL   Вверх
Skynin
Дата 12.10.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



JNA  это всего лишь средство обратиться к API ОСи. Оно ничего о нем не знает, а только переадресовывает.
Если программисту на java нужно обратиться к функциям конкретной API он:
читает доку по API нужной ему ОСи.
Описывает в "формате JNA" нужные ему функции
Вызывает их потом по джавоски.

И конечно, перед этим пишет определитель ОСи. А то при попытке вызвать API ОСи мака под мысы виндовс будет бяка.
В общем случае - он должен написать свои обертки вокруг этих вызовов.

Классика - abstract class OpenNativeFileDialog
и реализации, под нужные операционки. И фабрика - которая вернет нужный.

Цитата

т.е. на  pure Java нельзя с Маками работать ?

А где на pure Java можно работать с любой ОСью на уровне API  smile 

Цитата

где с помощью JNA можно получить путь к установленной программе на MacOS ?

С API MacOS не знаком.
А если речь о пути к самому jarнику с майном, то без JNA
Код

URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
  throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());

Getting directory path to .class file containing main

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Samotnik
Дата 12.10.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Skynin @  12.10.2009,  17:52 Найти цитируемый пост)
С API MacOS не знаком.
А если речь о пути к самому jarнику с майном, то без JNA

нет, речь идет о том, чтобы с помощью Java на MacOS запустить установленную программу, ну  скажем  Photoshop или OpenOffcie, либо что-то другое, не важно. 
То же самое я реализовывал для Виндовс, для этих целей, я работал на java с реестром Винды, и брал из реестр пути этих программ, затем запсукал эти программы smile
Вот теперь стала задача, реализовать тоже самое, но только для MacOS.  И возник вопрос, как это сделать на Маке smile

Цитата(Skynin @  12.10.2009,  17:52 Найти цитируемый пост)
А где на pure Java можно работать с любой ОСью на уровне API

можно,  smile  в Windows реестр влезть 

Это сообщение отредактировал(а) Samotnik - 12.10.2009, 18:02
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



Ой как все запущенно... как хорошо, что я работаю с SWT и этих проблем не знаю....
вот как запустить стандартную программу для .txt 
Код

package org.eclipse.swt.snippets;

/*
 * Program example snippet: invoke the system text editor on a new file
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 */
import org.eclipse.swt.program.*;
import org.eclipse.swt.widgets.*;

public class Snippet30 {

public static void main (String [] args) {
    Display display = new Display ();
    Program p = Program.findProgram (".txt");
    if (p != null) p.execute ("newfile");
    display.dispose ();
}




а это как взять стандартную иконку для .bmp
Код

package org.eclipse.swt.snippets;

/*
 * Program example snippet: find the icon of the program that edits .bmp files
 */
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.program.*;

public class Snippet32 {

public static void main (String [] args) {
    Display display = new Display ();
    Shell shell = new Shell (display);
    Label label = new Label (shell, SWT.NONE);
    label.setText ("Can't find icon for .bmp");
    Image image = null;
    Program p = Program.findProgram (".bmp");
    if (p != null) {
        ImageData data = p.getImageData ();
        if (data != null) {
            image = new Image (display, data);
            label.setImage (image);
        }
    }
    label.pack ();
    shell.pack ();
    shell.open ();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    if (image != null) image.dispose ();
    display.dispose ();
}


и прекрасно работает везде.... и в вин и в лин и в мак

... или я проблемы не понял ?!

Это сообщение отредактировал(а) firedrago - 12.10.2009, 18:11
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(firedrago @  12.10.2009,  18:10 Найти цитируемый пост)
или я проблемы не понял ?!

ну все просто же. 
Стоит задача : 
Запустить файл  My_famili.jpg в порграмме Photoshop на всех ОС,  на  ЯП Java  smile  

Это сообщение отредактировал(а) Samotnik - 12.10.2009, 18:21
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



так я и говорю swt.....
Код

Program p = Program.findProgram (".jpg");
    if (p != null) p.execute ("My_famili.jpg");

и всё......
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



firedrago, ну хорошо. 
А если я хочу выбрать ? Т.е. у меня к примеру, есть 5 программ, которые могут открыть  файл 1.jpg  сегодня я хочу открыть ффотошопом, и передаю в метод открытия файла - параметр фотошоп, завтра я хочу этот файл открыть корелом,  и завтра буду передавать в метод параметр corelDraw.  
как это реализовать ? 
Как реализовать вызов порграммы ? 
Скажу сразу, что в виндовс я эьто реализовал тем образом, что взял значение реестра для фотошопа, оно у меня такое  
"c:\Program Files\Adobe\Adobe Photoshop CS3\Photoshop.exe" 
А затем все просто - я вызываю метод exec
Код

Runtime.getRuntime().exec(new String[]{"c:\Program Files\Adobe\Adobe Photoshop CS3\Photoshop.exe", filename});

но ведь это не будет работать нигде кроме Виндовс. Вот и взоник вопрос, как запустить установленную программу Фотошоп из разных ОС smile
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



а в линухе и в маке есть замечательная команда whereis
типа 
Код

whereis gimp

получаешь его путь и вперед

ПЫ СЫ: смотришь на какой ты системе, и действуешь в зависимости....

Это сообщение отредактировал(а) firedrago - 12.10.2009, 18:42
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



firedrago, в маке ничего не происходит посде этой команды
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



ты должен знать название проги
только что проверил...

Darwin dr.local 8.11.1 Darwin Kernel Version 8.11.1: Wed Oct 10 18:23:28 PDT 2007; root:xnu-792.25.20~1/RELEASE_I386 i386 i386
de:~ dr$ whereis pico
/usr/bin/pico
dr:~ lr$


Добавлено через 10 минут и 46 секунд
даже тебе наверное подойдет больше команда which .....

Код

fa@fa-laptop:~/work/workspace$ whereis oocalc
oocalc: /usr/bin/oocalc /usr/share/man/man1/oocalc.1.gz
fa@fa-laptop:~/work/workspace$ which oocalc
/usr/bin/oocalc
fa@fa-laptop:~/work/workspace$ 


PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



на моем маке эти команды не работают  (((
Ни для Фотошопа, ни для корелаа, ни для офиса, ни для чего ((( 
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



firefox есть ?
так.... тести...
Код

Process p = Runtime.getRuntime().exec("which firefox");


Добавлено @ 19:25
Код

package which;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class WhichTest {

    public static void main(String[] args) throws IOException, InterruptedException {
        System.out.println(whichFirefox().getAbsolutePath());
    }

    private static File whichFirefox() {
        try {
            Process which = Runtime.getRuntime().exec("which firefox");
            BufferedReader reader = new BufferedReader(new InputStreamReader(which.getInputStream()));
            return new File(reader.readLine());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}



Это сообщение отредактировал(а) firedrago - 12.10.2009, 19:26
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



firedrago,  не работает ((   
ничего не выводит. 
Да даже сама  команда в консоле не пашет ((( 
работает только вот это 
whereis pico
а все остальные ВереИзы не  работают (
PM MAIL   Вверх
firedrago
Дата 12.10.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



?! реально не понимаю...
сам вот только попробовал на MacOS и на Ubuntu - все прекрасно работает.....
PM MAIL   Вверх
COVD
Дата 12.10.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



PM MAIL   Вверх
Skynin
Дата 12.10.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Цитата(Skynin @  12.10.2009,  17:52 Найти цитируемый пост)
я работал на java с реестром Винды,

И с помощью каких классов ? Случайно не с реализованных на JNA или сходным способом, как в SWT?

Цитата(Skynin @  12.10.2009,  17:52 Найти цитируемый пост)

Вот теперь стала задача, реализовать тоже самое, но только для MacOS.  И возник вопрос, как это сделать на Маке smile

А там тоже реестр? Такой же структуры?
И почему классы которые использовались для Винды - не работают если это чистые java-классы?

Цитата(Skynin @  12.10.2009,  17:52 Найти цитируемый пост)
А где на pure Java можно работать с любой ОСью на уровне API
можно,  smile  в Windows реестр влезть


Конечно можно, берешь JNA и лезешь куды хошь.  Только JNA - это НЕ pure Java. Так же как и JNI. Так же как и SWT.

Вы похоже не понимаете что такое pure Java, а что не pure.
Может отсюда и остальные проблемы?  ;)
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
Samotnik
Дата 12.10.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Skynin @  12.10.2009,  22:12 Найти цитируемый пост)
Вы похоже не понимаете что такое pure Java, а что не pure.
Может отсюда и остальные проблемы?  ;) 

зачем Вы так ?

Добавлено через 2 минуты и 29 секунд
Цитата(firedrago @  12.10.2009,  19:39 Найти цитируемый пост)
сам вот только попробовал на MacOS и на Ubuntu - все прекрасно работает..... 

у меня на Убунту тоже работает 

Это сообщение отредактировал(а) Samotnik - 12.10.2009, 23:10
PM MAIL   Вверх
firedrago
Дата 13.10.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



еще один вариант
в мак ос как правило все проги в /Applications/НАЗВАНИЕ.app/Contents/MacOS/НАЗВАНИЕ - может так попробовать.......

Только не все 100% так будет например :
/Applications/Firefox.app/Contents/MacOS/firefox
/Applications/Adobe Photoshop CS2/Adobe Photoshop CS2/Contents/MacOS/Adobe Photoshop CS2

Либо по названиям искать в подкаталоге /Applications программой find....

Но все это как-то коряво.....

Больше ничего в голову не приходит.... сорри..... smile 
PM MAIL   Вверх
AlexeyVorotnikov
Дата 13.10.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Цитата(Samotnik @  12.10.2009,  19:20 Найти цитируемый пост)
Стоит задача : 
Запустить файл  My_famili.jpg в порграмме Photoshop на всех ОС,  на  ЯП Java

А если Фотошоп не установлен?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Samotnik
Дата 13.10.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



firedrago,  код по прежнему не работает ((
А скажите пажалста, как вместо which firefox  проверить Open Office ?

Добавлено через 24 секунды
Цитата(AlexeyVorotnikov @  13.10.2009,  09:23 Найти цитируемый пост)
А если Фотошоп не установлен? 

в этом вопроса нету, тут я уже все продумал  smile 
PM MAIL   Вверх
firedrago
Дата 13.10.2009, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



Код

fa@fa-desktop:~$ which oocalc
/usr/bin/oocalc
fa@fa-desktop:~$ which oowriter
/usr/bin/oowriter

PM MAIL   Вверх
Samotnik
Дата 13.10.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



firedrago, спасибо. 
Я не понимаю, почему у меня ничего не происходит.
даже если написать 
which dfgjhsdfkgjhsdlkfghsldkjfg
результат тоже что и 
which oowriter
which firefox
which itunes
...

PM MAIL   Вверх
firedrago
Дата 13.10.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 22.9.2005

Репутация: 2
Всего: 3



х.з. я сам в маках не силен,
но если честно, то я бы сделал по другому.....используя тот-же swt.....
для файла который надо открыть брал бы default программу для расширения...
а если надо другую, так пусть user выбирает где она или сам вписывает путь .....
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1398 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.