Avatar billede etif Nybegynder
14. august 2003 - 13:49 Der er 4 kommentarer og
1 løsning

Hvad er årsagen til at man ikke kan låse JAWT_DrawingSurface ?

Jeg har behov for at få fat i HWND for et vindue i en applet og til det formål anvender jeg SUN's awt native interface via JNI i et c++-program.
Denne metode er valgt da man tilsyneladende fra og med java 1.4 ikke længere kan gøre det direkte i java.

Jeg har lavet følgende c++ program:
// tm_Mycanvas.cpp: implementation of the tm_Mycanvas class.
//
//////////////////////////////////////////////////////////////////////

#include "jawt_md.h"
#include "tm_MyCanvas.h"


/*
* Class:    tm_MyCanvas
* Method:    getHwnd
* Signature: ()I
*/
extern "C" {
JNIEXPORT jint JNICALL Java_tm_MyCanvas_getHwnd
  (JNIEnv* env, jobject canvas)
{
    JAWT awt;
    JAWT_DrawingSurface* ds;
    JAWT_DrawingSurfaceInfo* dsi;
    JAWT_Win32DrawingSurfaceInfo* dsi_win32;
    jint lock;
    HWND hwnd;

    /* get the AWT */
    awt.version = JAWT_VERSION_1_3;
    if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
        printf("AWT not found\n");
            return 0;
    }

    /* Get the drawing surface */
    ds = awt.GetDrawingSurface (env,canvas);
    if (ds == NULL){
        printf("NULL drawingsurface\n");
        return 1;
    }

    /* Lock the drawing surface */
    lock = ds->Lock(ds);
    if ((lock & JAWT_LOCK_ERROR) != 0) {
        printf("Error locking surface\n");
        awt.FreeDrawingSurface(ds);
        return 2;
    }

    /* Get the drawing surface info */
    dsi = ds->GetDrawingSurfaceInfo (ds);
    if (dsi == NULL){
        printf("ERROR getting drawing surface info\n");
        ds->Unlock;
        awt.FreeDrawingSurface(ds);
        return 3;
    }

    /* get the platform-specific drawing info */
    dsi_win32 = (JAWT_Win32DrawingSurfaceInfo*) dsi->platformInfo;

    /* gethwnd */
    hwnd = dsi_win32->hwnd;
   

    /* Free the drawing surfacce info*/
    ds->FreeDrawingSurfaceInfo(dsi);

    /* Unlock the drawing surface */
    ds->Unlock(ds);

    /* Free the drawing surfacce */
    awt.FreeDrawingSurface(ds);

    /* return the hwnd */
    return (int)hwnd;
}
}

Problemet er at når jeg kalder det fra mit javaprogram ryger jeg ind i en JAWT_LOCK_ERROR og jeg får returneret 2.

Jeg har ikke rigtig kunnet finde noget på nettet om mulige årsager JAWT_LOCK_ERROR.

Hvad kan være årsagen til fejlen ?
Findes der en lettere måde at få fat i HWND i java 1.4 ?
Avatar billede arne_v Ekspert
14. august 2003 - 18:08 #1
Avatar billede etif Nybegynder
15. august 2003 - 10:48 #2
Desværre kan jeg ikke nå denne side. Måske pga. strømsvigty i USA ?Men jeg har fundet en anden løsning, da jeg alligevel var inde og surfe; nemlig på følgende site:
http://forum.java.sun.com/thread.jsp?forum=52&thread=368123&tstart=0&trange=15. Hvis andre skulle få samme problem, er der en løsning her.
Avatar billede arne_v Ekspert
15. august 2003 - 11:03 #3
Hvad for en af dem ? FindWindow ?
Avatar billede etif Nybegynder
15. august 2003 - 12:46 #4
Ja jeg anvender findwindow, da jeg kun skal anvende det til nogle dialogbokse, som ikke er aktive særlig længe af gangen og aldrig mere end et af gangen. Problemer med navnesammenfald skulle derfor være nær ved ikke eksisterende.
Avatar billede etif Nybegynder
19. august 2010 - 08:05 #5
Sagen derfor lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Stærk sagsbehandler til støtte for Kapacitetsmanager og egen portefølje

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-Sikkerhedsrådgiver til Cyberdivisionen i Hvidovre

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer