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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> system tray и пограмма в *.jar файле, jar не стартует(в eclipse стартует) 
V
    Опции темы
Warchief
Дата 19.1.2008, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно проблема при создании .jar, сам файл создаются, но при попытке его запустить прога начинает стартоветь и останавливается всё время на коде добавляющем способность сворачивать приложение в system tray.
вот код на котором дальше дело не идёт. Хотя если запускать програму из эклипсы или из консоли всё работает как надо.  smile 


эти строки кода находятся в контрукторе приложения: 
Код

trayIcon = new TrayIcon(ImageIO.read(new File("icons/" + "dir.png")), "text tuta");

        trayIcon.addActionListener(new ActionListener()
        {
          public void actionPerformed(ActionEvent e)
          {
            setVisible(true);
            setState(JFrame.NORMAL);
            removeTrayIcon();
          }
        });
        addWindowStateListener(new WindowStateListener()
        {
          public void windowStateChanged(WindowEvent e)
          {
            if(e.getNewState() == JFrame.ICONIFIED)
            {
              setVisible(false);
              addTrayIcon();
            }
          }
        });


плюс ещё этот код(эти строки уже вне конструктора):

Код

   public void actionPerformed(ActionEvent ae) {
    }
    private void removeTrayIcon()
    {
      systemTray.remove(trayIcon);
    }

    private void addTrayIcon()
    {
      try
      {
        systemTray.add(trayIcon);
        trayIcon.setToolTip("text here");
      }
      catch(AWTException ex)
      {
        ex.printStackTrace();
      }
    }


Это сообщение отредактировал(а) Warchief - 19.1.2008, 03:46
PM MAIL ICQ Skype   Вверх
dorogoyIV
Дата 19.1.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 36
Всего: 46



в джаре работает:
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;

public class Main extends JFrame
{
 Main()
 {
  setBounds(100,100,400,300);
  new MyTray("plus.gif", "Hi", this);
 }

 public static void main(String [] args)
 {
  JFrame f=new Main();
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

class MyTray implements ActionListener,
                        WindowListener
{
 TrayIcon trayicon;
 PopupMenu popup=new PopupMenu();
 MenuItem item=new MenuItem("Open");
 SystemTray tray;
 JFrame frame;

 public MyTray(String s, String tooltip, JFrame frame)
 {
  this.frame=frame;
  frame.addWindowListener(this);

  item.setEnabled(false);
  MenuItem exit=new MenuItem("Exit");
  popup.add(item);
  popup.add(exit);
  item.addActionListener(this);
  exit.addActionListener(this);

  if(SystemTray.isSupported())
  {
   tray=SystemTray.getSystemTray();

   try
   {
    Image image=ImageIO.read(getClass().getResource(s));
    trayicon=new TrayIcon(image, tooltip, popup);
    tray.add(trayicon);
   }
   catch(Exception ex){}
  }
 }
 public void actionPerformed(ActionEvent e)
 {
  if(e.getActionCommand().equals("Exit"))
  {
   System.exit(0);
  }
  if(e.getActionCommand().equals("Open"))
  {
   frame.setVisible(true);
   frame.setState(JFrame.NORMAL);
   item.setEnabled(false);
  }
 }

 public void windowIconified(WindowEvent e)
 {
  frame.setVisible(false);
  item.setEnabled(true);
 }
 public void windowDeiconified(WindowEvent e){}
 public void windowDeactivated(WindowEvent e){}
 public void windowActivated(WindowEvent e){}
 public void windowClosed(WindowEvent e){}
 public void windowClosing(WindowEvent e){}
 public void windowOpened(WindowEvent e){}
}




Это сообщение отредактировал(а) dorogoyIV - 19.1.2008, 09:01
PM MAIL   Вверх
Warchief
Дата 19.1.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



dorogoyIV

ога smile спасибо. только с твоим кодом проблема в Linuxe, там не отображается иконка в трее  smile  .  В винде всё нормально.

Ребят поделитесь кодом, который рабоает нормально хотя-бы в линуксе и винде.
PM MAIL ICQ Skype   Вверх
LSD
Дата 20.1.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(Warchief @  19.1.2008,  20:54 Найти цитируемый пост)
только с твоим кодом проблема в Linuxe, там не отображается иконка в трее

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

Добавлено через 2 минуты и 54 секунды
А вообще, не мешает иногда и в FAQ заглядывать smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Warchief
Дата 20.1.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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



объясни поточнее пожалуйста.   smile  
И ведь если я старую прогу из консоли java proga.class , то иконка в трее отображается, а из .jar'a нет.

Цитата
А вообще, не мешает иногда и в FAQ заглядывать


а мой код как раз от-туда  smile 




Это сообщение отредактировал(а) Warchief - 20.1.2008, 21:01
PM MAIL ICQ Skype   Вверх
LSD
Дата 20.1.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Тогда скорее всего проблема в:
Код

new TrayIcon(ImageIO.read(new File("icons/" + "dir.png")), "text tuta")

у тебя ресурсы (а именно dir.png) упакованы в jar?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Warchief
Дата 20.1.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



LSD

Цитата
у тебя ресурсы (а именно dir.png) упакованы в jar?


 Да упакованы  smile  и к тому-же я зыбал отписать, что в папке icons(он запакована в jar) ещё есть несколько иконок, которые изпользуються в других местах программы. просто все иконки из этой папки не отображаются из .jar'a хотя из консоли или из еклипсы, когда запускаю прогу, отображаются.



И ещё странно в том коде, который предложил dorogoyIV, иконка в трее работает из джара, но только в винде,  в линуксе не отображается вообще.

Это сообщение отредактировал(а) Warchief - 20.1.2008, 21:45
PM MAIL ICQ Skype   Вверх
LSD
Дата 20.1.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Вообщем так, вся проблема в том, что из jar нельзя читать данные через File, нужно делать через MyClass.class.getResourceAsStream(s), а там уже создавать иконку. При этом учти, если путь начинается с /, то он считается абсолютным относительно jar, если нет, то к нему будет добавлены пакаджи. Т.е. для ru.vingrad.MyClass, строка images/some.gif будет искаться по адресу ru/vingrad/images/some.gif.

И запускай свой код:
Код

java -jar my.jar

чтобы видеть сообщения об ошибках.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dorogoyIV
Дата 20.1.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 36
Всего: 46



Цитата(Warchief @  20.1.2008,  21:40 Найти цитируемый пост)
что в папке icons(он запакована в jar) ещё есть несколько иконок, которые изпользуються в других местах программы. просто все иконки из этой папки не отображаются из .jar'a хотя из консоли или из еклипсы, когда запускаю прогу, отображаются.

невнимательность  smile 
я же написал:
Код

    Image image=ImageIO.read(getClass().getResource(s));

попробуй еще так:
Код

    Image image=ImageIO.read(getClass().getResourceAsStream(s));

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

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

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


 




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


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

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