Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Richiamare un programma in CPP da una classe JAVA

    Ciao a tutti volevo chiedervi se sapete se è possibile richiamare un programma in CPP da una classe Java, so che potrebbe essere possibile con la classe System ma non ho la più pallida idea di come si faccia
    !
    Grazie mille !!!

  2. #2
    Ovviamente devi creare delle dll (o so, insomma shared-lib), che la VM caricherà in fase di runtime.
    Segui questa guida.
    lolide
    Java Programmer

    Informati

  3. #3

    Re: Richiamare un programma in CPP da una classe JAVA

    Originariamente inviato da LèMomò
    Ciao a tutti volevo chiedervi se sapete se è possibile richiamare un programma in CPP da una classe Java, so che potrebbe essere possibile con la classe System ma non ho la più pallida idea di come si faccia
    !
    Grazie mille !!!
    Forse ti serve dare uno sguardo qui
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    ODDIO sembra un casino ...spero di riuscirci O.O grazie mille!

  5. #5
    Originariamente inviato da LèMomò
    ODDIO sembra un casino ...spero di riuscirci O.O grazie mille!
    Il punto è charire cosa devi fare esattamente. Se devi semplicemente eseguire un programma esistente scritto in c++ (o anche in altri linguaggi) così come lo lanceresti con un doppio click è una cosa (e il link da seguire è quello che ti ho fornito), se invece devi scrivere un wrapper java per una libreria di funzioni native (sotto win una dll ad esempio) , allora devi usare le JNI e studiare quanto linkato da lolide. Nel secondo caso stai sostanzialmente esponendo al programma java dei metodi che non sono implementati in java puro ma in realtà richiamano delle funzioni implementato in un altro linguaggio (all'interno della dll).
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Praticamente devo lanciare dei comandi dal una mia ipotetica interfaccia grafica in JAVA su un programma che è scritto in CPP che altrimenti eseguirei dal terminale ... ad esempio come lanciare un makefile!

  7. #7
    Originariamente inviato da LèMomò
    Praticamente devo lanciare dei comandi dal una mia ipotetica interfaccia grafica in JAVA su un programma che è scritto in CPP che altrimenti eseguirei dal terminale ... ad esempio come lanciare un makefile!
    Allora guardati la classe Runtime che ti ho linkato. Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Riprendo questa discussione perchè è proprio quello che sto cercando.Vi spiego:
    Ammeto che è un progetto universitario, ma non so veramente dove sbattere la testa. Dobbiamo creare un applicazione, usando però le classi scritte in C++. Le classi sono gia tutte pronte. So di dover usare JNI, e so anche usarlo/applicarlo usando metodi statici nativi che richiamano una semplice funzione che ritorna un qualcosa. Il problema si pone nel momento in cui devo richiamare costruttori e richiamarci dei metodi. Leggendo in giro ho visto che l'approccio è diverso: Ho scritto delle classi Java con vari metodi nativi e altre cose (preso spunto da un libro); vi posto il codice di una classe chiamata JMoneyBox:

    codice:
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    public class JMoneyBox extends JObject implements Serializable {
    
    	public native void setBalance(int aBalance);
    
    	public native int getBalance();
    
    	private native void _jni_initialize();
    
    	JMoneyBox() {
    		_jni_initialize();
    	}
    
    	private native int _jni_delete();
    
    	protected void finalize() {
    		_jni_delete();
    	}
    
    	private native void _jni_clone(JMoneyBox aMoneyBox);
    
    	public Object clone() throws CloneNotSupportedException {
    		JMoneyBox moneyBox = (JMoneyBox) super.clone();
    		_jni_clone(moneyBox);
    		return moneyBox;
    	}
    
    	private void writeObject(ObjectOutputStream out) throws IOException {
    		out.writeUTF(Integer.toString(getBalance()));
    	}
    
    	private void readObject(ObjectInputStream in) throws IOException,
    			ClassNotFoundException {
    		// Construct the C++ object
    		_jni_initialize();
    		int i = Integer.parseInt(in.readUTF());
    		setBalance(i);
    	}
    }
    Ammetto che non ho ancora capito il senso di writeObject e readObject. Inoltre adesso sono fermo. Leggevo nel libro che c'è bisogno di interfacciare l'oggetto in Java a quello in C++, ciò viene fanno con la registrazione di puntatori in un registro, in modo che il garbage collector riconosce gli oggetti usati/superflui. Non ho però capito se questo registro devo farlo io a mano o è già implementato nel JNI. Inoltre, come faccio a collegare il tutto alla mia classe c++?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.