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]>
|