Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro)
Google Pixel 10 Pro XL è il top di gamma della serie Pixel, presentando un ampio display Super Actua da 6.8 pollici insieme alle novità della serie, fra cui la ricarica wireless magnetica Pixelsnap e le nuove funzionalità AI avanzate. Il comparto fotografico include un sistema a tripla fotocamera con zoom Pro Res fino a 100x, mentre il processore Tensor G5 con 16GB di RAM garantisce prestazioni percepite molto elevate su Android.
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-09-2003, 11:12   #1
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
[Java] Ibridare il java

Salve a tutti vorrei avere delle informazioni su come utilizzare
la java native interface avevo trovato una guida s mokabyte
ma il mio piccolo programmino non funzionava potete aiutarmi???
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2003, 12:44   #2
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Spiegati meglio...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2003, 09:45   #3
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
volevo creare un programma in java che si appoggiasse
al c attraverso l' uso di metodi nativi. non ho ben capito la procedura che devo esegure per scrivere il codice in c creare la dll
e collegarla puoi aiutarmi?
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2003, 10:51   #4
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da palombaro
volevo creare un programma in java che si appoggiasse
al c attraverso l' uso di metodi nativi. non ho ben capito la procedura che devo esegure per scrivere il codice in c creare la dll
e collegarla puoi aiutarmi?

scrivi la classe java dichiarando native i metodi che vuoi realizzare in C (o C++), lo compili, usi il programma javah per generare l'header e ne fai l'include nel tuo codice C. Compili il codice C realizzando una libreria condivisa e non un eseguibile e sei a posto.
Ricordati il loadLibrary nel tuo codice java per caricarla
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2003, 11:15   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Sfruttare metodi nativi è di una semplicità esilarante. Provo a spiegarlo io, spero di esserne all'altezza.

Usiamo come ambiente di sviluppo C/C++ Dev-Cpp, così evito di dover spiegare cose che non conosco circa la costruzione di una libreria condivisa.

Come esempio di applicazione che sfrutta un metodo nativo creeremo un fantastico programma che faccia la somma di due numeri interi usando una funzione C per la somma e Java per l'input-output.

1) Creiamo un sorgente "Glob.java" (il nome naturalmente non è importante).
Codice:
class Glob {
Ora scriviamo il lato Java del metodo nativo. I metodi nativi devono essere presenti nel codice della classe che li usa: di solito si crea una classe "wrapper" che contenga tutti i metodi nativi e poi si usa questa classe dal lato Java. Noi abbiamo un solo metodo nativo, una classe dedicata mi sembra eccessiva.

Ecco la dichiarazione di un metodo nativo:
Codice:
public native int eseguiSomma(int numero1, int numero2);
Nota l'assenza del corpo del metodo. In pratica è come se la clausola "native" indicasse al compilatore che il corpo del metodo è definito nella dll (che creeremo).

Ora carichiamo la libreria DLL (la chiamo dll perchè do per presupposto che si lavori in windows, ma non cambia un bel nulla su sistemi diversi a parte l'estensione).
Codice:

static {
	System.loadLibrary("somma");
}
Il blocco "static {...}" evita che la libreria sia caricata due volte dalla jvm in caso di chiamte plurime (o almeno credo...). Nota che il nome "somma" sottointende che la libreria che andremo a creare si chiami "somma".

Ora usiamo il metodo nativo. Dato l'obiettivo, il main è più che sufficiente.

Codice:

public static void main(String[] args) {
	try {
		int n0=Integer.parseInt(a[0]);
		int n1=Integer.parseInt(a[1]);
		System.out.println(n0+" + "+n1+" = "+new Glob().eseguiSomma(n0,n1));
	} catch(NumberFormatException e) {
		e.printStackTrace();
		System.exit(0);
	} catch(ArrayIndexOutOfBoundsException e) {
		e.printStackTrace();
		System.exit(0);
	}	
}
Abbiamo preso i primi due valori dell'array di String "args", supponendo che siano i due numeri da sommare e li abbiamo sommati usando il metodo nativo "eseguiSomma" della classe "Glob". A scanso di equivoci, quel "new Glob().eseguiSomma(n0, n1)" è fatto così solo perchè sta nel main, non perchè sia nativo. Per Java è un metodo come un altro e si usa nello stesso modo dei non-nativi.

Chiudiamo il corpo della classe con una parentesi graffa chiusa e siamo a posto. Di seguito il codice completo:

Codice:
class Glob {
	public native int eseguiSomma(int numero1, int numero2);
	
	static {
		System.loadLibrary("somma");
	}
	
	public static void main(String[] a) {
		try {
			int n0=Integer.parseInt(a[0]);
			int n1=Integer.parseInt(a[1]);
			System.out.println(n0+" + "+n1+" = "+new Glob().eseguiSomma(n0,n1));
		} catch(NumberFormatException e) {

		} catch(ArrayIndexOutOfBoundsException e) {

		}
	}
}
Salva il file sorgente, possibilmente creando prima una cartella "dedicata", così evitiamo un po' di confusione. Diciamo che la cartella è "c:\glob".

Compila il sorgente (c:\glob> javac Glob.java).

Ora creiamo l'header c che serve da "ponte" tra Java e la libreria dinamica. L'header (*.h) può essere creato automaticamente usando il tool "javah" contenuto nel JDK. Il comando è il seguente:

c:\glob> javah Glob

Nella cartella c:\glob dovresti avere adesso un file glob.h. Il file contiene il prototipo della funzione JNI corrispondente al metodo nativo "eseguiSomma". Quel prototipo deve essere implementato in un sorgente C e poi usato per costruire la libreria dinamica.

E facciamolo.

Apri Dev-Cpp.

Crea un nuovo progetto "c" usando uno wizard "dll" e chiama il progetto "somma".
Salva il progetto nella cartella "c:\glob" (per semplicità, la libreria può trovarsi in qualunque cartella del sistema operativo inclusa nella proprietà "java.library.path" o nella cartella del file .class).
Dev-cpp crea 2 file sorgente "dllmain.c" e "dll.h". Non ci servono pertanto chiudili senza salvarli.
Aggiungi un nuovo file sorgente al progetto (che salverai poi come "sommaImp.c" o con un altro nome, è irrilevante).

Qui implementiamo il metodo nativo (nel nostro caso usando C, potrebbe essere Assembler o un altro linguaggio, "nativo" significa "non-java").

Il nostro metodo nativo è elementare:

Codice:
#include <jni.h>
#include "Glob.h"
#include <stdio.h>

JNIEXPORT jint JNICALL 
Java_Glob_eseguiSomma (JNIEnv *env, jobject obj, jint num1, jint num2) 
{
    return num1+num2;
}
Trattandosi dell'implementazione di un metodo definito in un header puoi (devi) prendere come modello per il metodo il contenuto dell'header "Glob.h". C'è tutto un mondo dietro quel "JNIEXPORT jint JNICALL Java_Glob_eseguiSomma (JNIEnv *env, jobject obj, jint num1, jint num2)", solo che il post è già lungo senza...magari lo vediamo dopo?

Pima di compilare la nostra libreria occorre impostare i parametri del compilatore perchè trovi "jni.h".
L'header "jni" si trova nel jdk, cartella "include". Con dev-cpp la cosa si risolve così:

menu "strumenti"->"opzioni di compilazione". Nella finestra che compare seleziona la scheda "cartelle" quindi la scheda

"include C". Sopra il bottone "cancella invalida" c'è un pulsante che permette di selezionare una cartella del sistema.

Premilo e trova la cartella "c:\j2sdk1.4.2\include". Selezionala e poi premi "aggiungi". Fai lo stesso con la cartella

"c:\j2sdk1.4.2\include\win32". La posizione della cartella può cambiare a seconda dell'installazione del JDK presente sul tuo sistema operativo.

A questo punto non resta che lasciar compilare la libreria a Dev-cpp.

Fatto questo troverai nella cartella "c:\glob" un file "somma.dll".

E il gioco è fatto:

C:\JP\glob>java Glob 10 20
10 + 20 = 30

C:\JP\glob>

Dev-cpp lo trovi qui.

Se ci sono problemi sai dove trovarci

Ciao.

Ultima modifica di PGI : 29-09-2003 alle 11:19.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2003, 11:58   #6
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
grazie a tutti avevo trovato un esmpietto su moka ma quando compilavo il codice in c mi diceva che non trovava le librerie standard del c!!!
ora provero grazie ancora!!!!!!!!!!!!!!!!!
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2003, 19:31   #7
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
17 D:\prova\c++\sommaImp.c:1
jni.h: No such file or directory.

2 D:\prova\c++\sommaImp.c
In file included from sommaImp.c

17 D:\prova\c++\classenativa.h:2
jni.h: No such file or directory.

2 D:\prova\c++\sommaImp.c
In file included from sommaImp.c

15 D:\prova\c++\classenativa.h
parse error before `Java_classenativa_somma'

8 D:\prova\c++\sommaImp.c
parse error before `Java_classenativa_somma'

D:\prova\c++\Makefile.win
[Build Error] [sommaImp.o] Error 1



quando compilo.... la dll mi da sti errori cosa sbaglio?
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2003, 20:00   #8
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Mi sembra che il compilatore che stai usando non trovi il file di intestazione jni.h. Forse dovresti controllare le opzioni di compilazione per vedere se è stato inserita la cartella in cui si trova il file.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 13:43   #9
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
Quote:
Originariamente inviato da PGI
Mi sembra che il compilatore che stai usando non trovi il file di intestazione jni.h. Forse dovresti controllare le opzioni di compilazione per vedere se è stato inserita la cartella in cui si trova il file.

la ho impostata nel profili di compilazione.... eppure mi dice che nn la trova che posso fare?
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 14:04   #10
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Prova a includerla con
#include "/percorsocompletoheader/jni.h"
anche se non e' la soluzione piu' elegante
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 16:30   #11
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
Quote:
Originariamente inviato da lovaz
Prova a includerla con
#include "/percorsocompletoheader/jni.h"
anche se non e' la soluzione piu' elegante
ho provato gli errori si son centuplicati sono diventati
501
altri suggerimenti?
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 17:58   #12
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
A scanso di equivoci prova a cercare il file jni.h e vedere dov'è.
Lo dico perchè è incluso nel JDK ma non nel JRE e ci sono ambienti di sviluppo (tipo Eclipse) che funzionano anche senza un jdk.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 18:22   #13
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
stai nella cartella jbuilder9\jdk1.4\include
il compilatore c++ se ne sbatte però non le trova!!!!
help my!!!
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2003, 22:48   #14
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Azz. Che compilatore usi?
A mali estremi...prova a cambiarlo (in giro per il web ce ne sono a palate anche freeware tipo gnu-gcc)
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 08:15   #15
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
uso quello consigliatomi qua!!!!!! il dev c++
non so + che pesci pigliare qualche suggerimento?
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 11:22   #16
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Questo è il contenuto della cartella "include C" che ho nelle opzioni ci compilazioni di dev-cpp

c:\Dev-cpp\include
c:\j2sdk1.4.2\include
c:\j2sdk1.4.2\win32
c:\j2sdk1.4.2\jre\bin\client

Trova gli omologhi sul tuo sistema e includili.
Ora prova ad aprire un nuovo progetto e scrivere questo in un nuovo file sorgente

progetto -> nuovo -> cartella "basic" -> empy project

Scegli come linguaggio "C"

Poi:

nuovo -> file sorgente -> aggiungi unità al progetto corrente "si"

Codice:
#include "jni.h"

int main() {
return 0;
}
Compila e dimmi "è tutto ok adesso". Nel caso in cui funzioni, ti dico subito che non so perchè.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 11:39   #17
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
no non funzia!! ora provo a scaricare e installare una jvm a parte magari è quella nel jburder che rompe le scatole.
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 12:01   #18
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Mi stupirebbe perchè la compilazione del file C non coinvolge la jvm.

Quali sono gli errori che ti da compilando:

Codice:
#include "jni.h"

int main() {
return 0;
}
Così provo a riprodurli con il dev-cpp che ho qui
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 12:23   #19
palombaro
Senior Member
 
Iscritto dal: Nov 2001
Città: Casteddu
Messaggi: 532
mi dice che non trova il file jni.h
palombaro è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2003, 12:40   #20
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
in dev-cpp c'è una cartella (opzioni di compilazione) "include" sia per C che C++. Hai impostato per entrambi le directory? (in teoria non cambia nulla perchè stiamo usando C e per c l'hai già impostato ma tecnologia fa rima con magia...)

prova a cambiare (nel file "minimo" che stiamo provando)

#include "jni.h"

con

#include "c:\j2sdk1.4.2....\jni.h" (cioè come segnalato da lovaz).

In questo caso, se trova il file jni.h dovrebbe dirti che non trova il resto...forse
PGI è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
SpaceX: i video e le foto dello spettaco...
Anche a Pescara si passa ai fatti: e-bik...
La One UI 8 è pronta: Samsung con...
Xiaomi annuncia l'arrivo in Italia dei R...
La Cina stupisce ancora: test per la tur...
L'iconico iMac G3 diventerà un set LEGO?...
Microsoft: nessun legame tra update di a...
Rivoluzione in arrivo per Threads: il so...
Battlefield 6: molti utenti hanno giocat...
Acronis sfrutterà le NPU delle CP...
ChatGPT, le chat possono essere segnalat...
Xiaomi lancia HyperOS 3 basato su Androi...
Tesla lancia la Model Y Performance: nuo...
HPE aggiunge nuove funzionalità d...
Socket AM5 a rischio? ASRock prova a spe...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v