Rozdiel bude v tom, ze toto by malo chodit aj pod inymi OS ako Windows, dodate mu len nativnu kniznicu.
JDIC je opensource, da sa stiahnut zdrojak ( https://jdic.dev.java.net/files/documents/880/62103/jdic-0.9.3-src.zip ), tab to odchytavanie eventov bude, len to treba najst.
Kvoli comu nemozte pouzit javu 6? Ta to podporuje uz priamo http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray/

ya


Martin Blažek  wrote / napísal(a):
Tak jsem přidal dll knihovnu a dostal jsem nový error :-)

Exception in thread "Thread-2" java.lang.NoSuchMethodError: notifyEvent
   at org.jdesktop.jdic.tray.internal.impl.DisplayThread.initTray(Native Method)
   at org.jdesktop.jdic.tray.internal.impl.DisplayThread.run(Unknown Source)

Ovšem pokud to znamená, že stejně musím používat externí dll, tak to už z fleku můžu použít tu svou, která už funguje :-) Teda až na to, že pořád nevím, jak dostat tu informaci o kliknutí ;-)

Michal Palička napsal(a):
Dobry den,

neni k tomu JDIC jeste potreba doplnit do JRE/JDK nejakou nativni knihovnu (so, dll)?
Zda se, ze jen jdic.jar nebude stacit...

Podle dokumentu
https://jdic.dev.java.net/documentation/README.html
to vskutku vypada, ze tam neco takoveho je...

mp.


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] On Behalf Of Martin Blažek
Sent: Wednesday, November 28, 2007 19:11 PM
To: Java
Subject: Re: JNI - Odchycení zprávy okna

Stáhl jsem jdic.jar a zkusil zkompilovat a spustit example, který tam
byl přiložený.
Tohle je výsledek:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no tray in
java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at
org.jdesktop.jdic.tray.internal.impl.DisplayThread.<clinit>(Unknown Source)
    at
org.jdesktop.jdic.tray.internal.impl.WinSystemTrayService.<clinit>(Unknown
Source)
    at
org.jdesktop.jdic.tray.internal.impl.ServiceManagerStub.getService(Unknown
Source)
    at org.jdesktop.jdic.tray.internal.ServiceManager.getService(Unknown
Source)
    at org.jdesktop.jdic.tray.SystemTray.<clinit>(Unknown Source)
    at cz.martin.pokus.Tray.<init>(Tray.java:10)
    at cz.martin.pokus.Tray.main(Tray.java:208)

Nevíte, pls, co s tím?

Díky.

M.


Martin Blažek napsal(a):
 
Díky, díky, vyzkouším to :-)

Filip Jirsák napsal(a):
   
A pokud už z nějakého důvodu nemůžete použít Javu 6, podívejte se na
https://jdic.dev.java.net/ , odkud ta komponenta pro Javu 6 pochází.

Filip Jirsák

2007/11/28, Vity <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:

    Ahoj,
    nebylo by 10x jednodussi pouzit Javu 6, ktera ma primo pro tohle
    podporu?

    -Vity

    > -----Original Message-----
    > From: [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>
    > [mailto:[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>] On Behalf Of Martin Blažek
    > Sent: Wednesday, November 28, 2007 6:33 PM
    > To: [email protected] <mailto:[email protected]>
    > Subject: JNI - Odchycení zprávy okna
    >
    > Nazdar všem.
    >
    > Můj problém je následovný:
    > Mám Java aplikaci, kterou chci "minimalizovat do try lišty".
    > Udělal jsem
    > si proto pomocí JNI dll knihovnu ve které mám metody
minimizeToTry a
    > restoreFromTry. V Javě mám udělané native metody stejného
    > jména, které
    > volám. Po zavolání minimizeToTry se vytvoří neviditelné okno,
    > jehož HWND
    > se použije při vytvoření ikonky. Ikonka se v try liště ukáže a po
    > restoreFromTry i správně zmizí. Moje otázka zní: Jak
    > zajistit, aby se po
    > kliknutí na ikonku v liště dalo vědět Java aplikaci, aby se mohla
    > zobrazit a aby se zavolala restoreFromTry (nebo provedla něco
    jiného)?
    > Poznámka: Samozřejmě je to jen pokusná verze, jaká ikonka tam
    > bude a tak
    > podobně neřeším  :-)
    >
    > Díky všem za rady  :-)
    >
    >
    > Global.java:
    > ...
    > public static native void minimizeToTry(String title);
    > public static native void restoreFromTry();
    > ...
    >
    > dllmain.cpp:
    > #include " dll.h"
    >
    > HWND hwnd;
    > LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    > BOOL createWindow(void);
    >
    > JNIEXPORT void JNICALL Java_cz_pokus_Global_minimizeToTry(JNIEnv *
    > jnienv, jclass jclass, jstring title){
    >  jboolean isCopy;
    >  const char *windowTitle = jnienv->GetStringUTFChars(title,
    &isCopy);
    >
    >  createWindow();
    >
    >  NOTIFYICONDATA nid = { 0 };
    >  nid.cbSize = sizeof(NOTIFYICONDATA);  nid.hWnd = hwnd;  nid.uID =
    > ICON_1;  nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    >  nid.uCallbackMessage = MSG_MINTRAYICON;  nid.hIcon =
LoadIcon(NULL,
    > IDI_APPLICATION);
    >  strcpy(nid.szTip, windowTitle);
    >
    >  Shell_NotifyIcon(NIM_ADD, &nid);
    >
    >  return;
    > }
    >
    > JNIEXPORT void JNICALL
Java_cz_pokus_Global_restoreFromTry(JNIEnv *
    > jnienv, jclass jclass){
    >  NOTIFYICONDATA nid = {0};
    >  nid.cbSize = sizeof(NOTIFYICONDATA);
    >  nid.hWnd = hwnd;
    >  nid.uID = ICON_1;
    >  Shell_NotifyIcon(NIM_DELETE, &nid);
    >
    >  return;
    > }
    >
    > BOOL createWindow(){
    >  WNDCLASSEX wincl;
    >
    >  //wincl.hInstance = hThisInstance;
    >  wincl.lpszClassName = "HLPWINDOW";
    >  wincl.lpfnWndProc = WindowProcedure;      wincl.style =
CS_DBLCLKS;
    >  wincl.cbSize = sizeof (WNDCLASSEX);
    >  wincl.hIcon = NULL;
    >  wincl.hIconSm = NULL;
    >  wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    >  wincl.lpszMenuName = NULL;
    >  wincl.cbClsExtra = 0;  wincl.cbWndExtra = 0;
    >  wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    >
    >  if (!RegisterClassEx (&wincl)){
    >    printf("Chyba pri registrovani!!!
    > ");
    >    return FALSE;
    >  }
    >
    >  hwnd = CreateWindowEx (
    >           0,                             "HLPWINDOW",
    >
    > "Pokus",                 WS_OVERLAPPEDWINDOW,
    > CW_USEDEFAULT,                 CW_USEDEFAULT,
    > 544,                           375,
    >           HWND_DESKTOP,
    >           NULL,
    >           NULL,           NULL           );
    >            return TRUE;
    > }
    >
    > LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM
    > wParam, LPARAM lParam){
    >  switch (message){
    > /* Zde odchycenou message bych chtel poslat Java aplikaci */
    >    default:
    >      printf("Message: %i\n",message);
    >      return DefWindowProc (hwnd, message, wParam, lParam);
    >  }
    > }
    >
    > dll.h:
    > /* DO NOT EDIT THIS FILE - it is machine generated */
    > #include <jni.h>
    > #include <windows.h>
    > #include <stdio.h>
    >
    > #define ICON_1 10001
    > #define MSG_MINTRAYICON (WM_USER+1)
    >
    > #ifndef _Included_cz_pokus_Global
    > #define _Included_cz_pokus_Global
    > #ifdef __cplusplus
    > extern "C" {
    > #endif
    >
    > JNIEXPORT void JNICALL
Java_cz_pokus_Global_minimizeToTry(JNIEnv *,
    > jclass, jstring);
    > JNIEXPORT void JNICALL
Java_cz_pokus_Global_restoreFromTry(JNIEnv *,
    > jclass);
    > #ifdef __cplusplus
    > }
    > #endif
    > #endif




--
Filip Jirsák
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
     
   


 



Odpovedet emailem