Esempio completo scaricabile / Interazione con C/C++

di il
4 risposte

Esempio completo scaricabile / Interazione con C/C++

Ciao Forum,

Vorrei iniziare a usare Java per dare le interfacce grafiche ai miei programmi (sono sotto Win). Ho provato a mettere in piedi piccoli esempi (cose che si trovano in rete cercando esempi di GUI elementari) ma non c'è verso di farli funzionare. Mi è chiaro che si aspetta un certo lavoro di "codifica" dei nomi classi con nomi files e tutto il resto, ma ottengo solo messaggi di errore. Volevo portare un caso specifico ma in un momento di frustrazione ho cancellato tutta la cartella "apprendimento di Java"

Vorrei chiedervi se conoscete un esempio completo nel senso di almeno due files sorgenti e che funzioni sotto Windows, in modo che non solo possa capire questa faccenda tramite esempio, ma possa anche capire come splittare i progetti complessi in più files.

Un'altra cosa che vorrei chiedere è la possibilità di interazione con il C/C++, che sono i linguaggi che conosco meno peggio. Capisco che quanto vado a dire sembri strano ma senza i puntatori non so pensare e quello che è più o meno oggettivamente considerato il vantaggio di Java per me è solo un ostacolo. Inoltre una parte della mia attività di programmatore è il calcolo scientifico e per questi e tanti motivi vorrei poter continuare a scrivere gli engines in C/C++ e usare Java solo per le interfacce. So che esistono soluzioni per usare il codice C/C++ direttamente nei progetti Java ma leggo che non sono affidabili. Ma se anche fosse, non sono certo siano a loro volta portabili. Pensavo invece a un modello client-server coi sockets di cui conosco le idee di base e che si adatta abbastanza bene al mio modo di pensare. Credo di poter essere più che certo che anche Java li supporta (di GCC sotto win sono sicuro perché li ho usati) ma chiedo conferma. Secondo voi funzionerebbe o ci sono modi migliori? Ovviamente parlo di soluzioni pulite, portabili e manutenibili.

Grazie molte per ogni suggerimento che potete darmi

4 Risposte

  • Re: Esempio completo scaricabile / Interazione con C/C++

    Alan_Reloaded ha scritto:


    Vorrei iniziare a usare Java per dare le interfacce grafiche ai miei programmi (sono sotto Win). Ho provato a mettere in piedi piccoli esempi (cose che si trovano in rete cercando esempi di GUI elementari) ma non c'è verso di farli funzionare. Mi è chiaro che si aspetta un certo lavoro di "codifica" dei nomi classi con nomi files e tutto il resto, ma ottengo solo messaggi di errore. Volevo portare un caso specifico ma in un momento di frustrazione ho cancellato tutta la cartella "apprendimento di Java"

    Vorrei chiedervi se conoscete un esempio completo nel senso di almeno due files sorgenti e che funzioni sotto Windows, in modo che non solo possa capire questa faccenda tramite esempio, ma possa anche capire come splittare i progetti complessi in più files.
    Se vuoi vedere piccoli esempi di GUI con Swing, puoi vedere i miei Java Examples .... li ho fatti apposta per questo.

    Alan_Reloaded ha scritto:


    Un'altra cosa che vorrei chiedere è la possibilità di interazione con il C/C++, che sono i linguaggi che conosco meno peggio. Capisco che quanto vado a dire sembri strano ma senza i puntatori non so pensare e quello che è più o meno oggettivamente considerato il vantaggio di Java per me è solo un ostacolo. Inoltre una parte della mia attività di programmatore è il calcolo scientifico e per questi e tanti motivi vorrei poter continuare a scrivere gli engines in C/C++ e usare Java solo per le interfacce.
    Java può interagire con codice "nativo" (tipicamente scritto in C/C++) tramite la JNI, Java Native Interface. Ma richiede innanzitutto delle solidissime basi su C/C++, conoscenza delle API e dello sviluppo "nativo" nel tal sistema operativo di interesse e sicuramente anche altro.

    Alan_Reloaded ha scritto:


    So che esistono soluzioni per usare il codice C/C++ direttamente nei progetti Java ma leggo che non sono affidabili.
    Letto .. dove? (e scritto da chi?)

    Alan_Reloaded ha scritto:


    Ma se anche fosse, non sono certo siano a loro volta portabili.
    Il "portabile" qui è ovviamente da precisare. NON certo a livello binario: una DLL per Windows non la puoi certo prendere ed utilizzare in una applicazione nativa Linux.
    Se il tuo codice C/C++ è compilabile anche su un'altra piattaforma ... allora è già un primo passo.
    Poi bisogna anche vedere COSA fa il tuo codice C/C++, nel senso di quale API/librerie usa. Se su Windows vai ad usare le API Win32 per accedere al Registry di Windows ... questo ovviamente di per sé NON è portabile su un altro SO.

    Alan_Reloaded ha scritto:


    Credo di poter essere più che certo che anche Java li supporta
    Il framework standard di Java ha le API per socket TCP e UDP (i datagram).
  • Re: Esempio completo scaricabile / Interazione con C/C++

    Grazie mille! La faccenda delle difficoltà di usare la JNI l'ho letta su una pagina che non trovo più. Ma diceva le stesse identiche cose che hai scritto tu, in più c'era scritto che in caso di certi errori nel codice può rendere instabile la JVM. Ovviamente conoscendo i miei limiti non ci penso nemmeno lontanamente a una soluzione del genere. Io ho basi decenti nel C/C++ ma dato che ho difficoltà con l'ereditarietà multipla dove diavolo posso andare? Per me la JVM è come il compilatore: una "cosa" che dò per scontato essere perfetta perché se no sono dolori.

    Sull'altra faccenda sì, era sottinteso che "portabile" implica che anche l'engine debba esserlo. Del resto faccio ogni sforzo per non scrivere porcherie, a malapena uso la STL in modo molto ortodosso e quasi sempre preferisco riscrivermi quello che potrei trovare in librerie che tanto ormai lo so, quasi sempre sbandierano un'elevata portabilità poi richiedono tonnellate di dipendenze. Naturalmente oltre le 1000 linee di codice cerco una libreria (veramente portabile) in giro, ma è un altro discorso. Credo che il massimo cui mi sono spinto siano stati sqlite e Lua

    Grazie anche per gli esempi, ora li scarico subito e provo a farli funzionare.
  • Re: Esempio completo scaricabile / Interazione con C/C++

    Di sicuro e' necessario saper programmare bene in C/C++, sopprattutto per quanto riguarda la gestione della memoria.
    Cosa che uno che fa calcolo scientifico dovrebbe conoscere come/meglio delle proprie tasche

    Detto questo, esiste un modo un po piu' semplice di accedere a codice scritto in C da Java, ed e' usare NON JNI, MA JNA

    https://en.wikipedia.org/wiki/Java_Native_Acces
    https://github.com/java-native-access/jn

    Per quanto riguardano gli esempi per le interfacce grafiche in java, CI SONO, BASTA ACQUISTARE il libro giusto.

    Per le Swing c'e' il manualone della O'Reilly oppure i tutorial della Sun/Oracle.

    Per quanto riguarda l'affidabilita': il problema NON E' Java con C/C++, ma CHI ha fatto il lavoro che lo ha fatto alla piu'-o-meno-circa-boh-speriamo-che-funzioni!

    Comunque e' strano che tu abbia scelto Java come piattaforma per la parte di GUI/integrazione, quando buona parte del mondo scientifico usa Python.

    Per la portabilita', la questione e' sempre la solita:
    - per Java, sono PERFETTAEMENTE portabili i .jar/.class, CIOE' I BINARI !!!!
    - per il C/C++ sono portabili i sorgenti, se scritti con intelligenza, ed eventualmente creando delle librerie di servizio per fare la stessa cosa su piattaforme diverse (ad esempio l'uso del Registry di Windows non e' portabile, ma l'idea certamente si)

    Poi' ovviamente, serve qualche accorgimento per far si che piccole differenze tra le piattaforme siano gestite in modo inteligente (ad esempio .dll in Windows e .so in Linux/Mac, oppure il fatto che in Windows si scrive C:\ mentre in Linux/Mac no, ma sono dettagli).

    Come programmatore C/C++, comunque, NON E' per nulla bene che tu non sappia utilizzare BENE le STL, boost, cblas, lapack, fftw, e le n-mila librerie cross-platform, straefficienti, ultraottimizzate che ci sono in circolazione.

    Per la compatibilita' sulle piattaforme, la soluzione e' semplice:

    1) compilatori GNU (CygWin per Windows, NON MINGW!!!!)
    2) una VM per SO (Windows, Linux, Mac). Vabbe' per il SO con cui sviluppi non serve
    3) cmake o autotools per la gestione delle differenze tra le diverse piattaforme
  • Re: Esempio completo scaricabile / Interazione con C/C++

    Grazie anche a te, innanzitutto. Sulla conoscenza che sarebbe opportuno e necessario avere ovviamente non è mai troppa. Non pretendo ovviamente di conoscere i problemi di gestione della memoria meglio o come le mie tasche ma per quello che sono in grado di fare, fin qui non mi è mai capitato di dire a me stesso che non ne potevo più di gestire la memoria e che vorrei tanto qualcosa che curasse da sé il garbage collection. Al contrario, io mi sento "tranquillo" solo se ci penso io, che poi non potrei giocare sul filo del byte per riscrivermi un allocatore molto critico non è un problema. In effetti non ho specificato che non è lavoro, io faccio tutt'altre cose ma ogni tanto mi capita di dover programmare. Per questo non mi paragono certamente a un programmatore, nemmeno a un programmatore scarso.

    Detto questo, avevo eccome considerato Python e tuttora lo sto esplorando. Ma io programmo (se pure male) in C da 30 anni e non riesco ad abituarmi a una sintassi diversa e un po' "ridondante", mi ricorda ADA che tenta di scimmiottare il linguaggio naturale in alcuni costrutti ("Package X IS", eccetera). Però sono più che disposto a insistere e ci riproverò. Avevo pensato a Java perché mi trovo benissimo con la sua sintassi, il sistema a socket mi è familiare almeno a livello di organizzazione del pensiero ma, ripeto, bisogna anche evolversi.

    Sulle librerie, ahimè, devo ammettere la mia pigrizia al 100%. Fin qui praticamente tutto quel che mi è potuto servire sta su "Numerical recipes in C" e quel codice mi ha sempre funzionato. Essendo totalmente privo di dipendenze mi ha sempre semplificato la vita. Certamente se ricevessi l'incarico professionale di lavorare a un software, e il gioco si facesse duro credo sarebbe inevitabile dover fare lo sforzo che fin qui quel libro mi ha risparmiato.
Devi accedere o registrarti per scrivere nel forum
4 risposte