View Full Version : [Java] Esperimento interfaccia grafica
+HookTheGhost+
09-02-2009, 12:19
Salve, ultimamente mi balenava l'idea di iniziare un progetto di intefaccia grafica scritta in Java per una versione di Linux. Qualcosa tipo i famosi KDE o GNOME ma scritto in Java.
Com'è possibile fare questo? So che è un progetto lungo e laborioso però vorrei comunque capire da dove dovrei cominciare e cosa dovrei seguire per continuare questo progetto
Grazie
MadJackal
09-02-2009, 12:35
E' un lavoro complesso, dovresti leggerti le specifiche di freedesktop e studiarti la documentazione delle api di X, e comprendere BENE come funziona il server ed il rapporto del server X con i client.
Prova innanzitutto a creare qualcosa come i "pannelli", che dovrebbero risultare relativamente semplici. Per il WM vero e proprio farai parecchia fatica, temo.
EDIT: e non ho idea se esistano i bindings delle librerie di X per java, oltretutto...
al limite se non esistono giá dei bindings Java per le API di X te li puoi in un certo senso "creare tu" scrivendo delle librerie native (informati su JNI). quello che non capisco é come mai vorresti scrivere un DE in Java anziché in C++: che vantaggi ti porterebbe Java in questo caso?
MadJackal
09-02-2009, 15:43
al limite se non esistono giá dei bindings Java per le API di X te li puoi in un certo senso "creare tu" scrivendo delle librerie native (informati su JNI). quello che non capisco é come mai vorresti scrivere un DE in Java anziché in C++: che vantaggi ti porterebbe Java in questo caso?
Credo sia più che altro un "esercizio di stile".
+HookTheGhost+
09-02-2009, 17:39
al limite se non esistono giá dei bindings Java per le API di X te li puoi in un certo senso "creare tu" scrivendo delle librerie native (informati su JNI). quello che non capisco é come mai vorresti scrivere un DE in Java anziché in C++: che vantaggi ti porterebbe Java in questo caso?
Allora premetto che faccio tutto così per sport, perchè se non mi pongo qualcosa da fare (che non siano i soliti programmini che fan 2 cose banali) non so come tenermi in allenamento e se non mi tengo in allenamento dimentico tutto. Allenamento e allo stesso tempo voglia di migliorare le proprie conoscenze e di ampliarle.
Detto questo si con il C++ probabilmente verrebbe fuori un lavoro più performante giusto? o dimentico qualche altro particolare? Io pensavo a Java dato che lo conosco un po' meglio ma posso sempre cambiare idea, ora ho aperto questo post vedo un po' cosa mi consigliate e poi vedrò :cool:
Allora premetto che faccio tutto così per sport, perchè se non mi pongo qualcosa da fare (che non siano i soliti programmini che fan 2 cose banali) non so come tenermi in allenamento e se non mi tengo in allenamento dimentico tutto. Allenamento e allo stesso tempo voglia di migliorare le proprie conoscenze e di ampliarle. assolutamente lodevole, infatti non ti voglio dire di desistere, ti voglio solo far riflettere su quali siano effettivamente le scelte migliori :)
... e naturalmente anche sul fatto che occorrerebbe non dimenticare mai la propria vita sociale :D ma a quello ci pensi tu, non sono fatti miei.
Detto questo si con il C++ probabilmente verrebbe fuori un lavoro più performante giusto? dipende: siamo nel 2009 ed esistono i compilatori JIT, non sempre i programmi nativi sono piu performanti di quelli managed, anzi a volte avviene proprio il contrario; ma con un uso sapiente del C++ ed un'impostazione corretta delle opzioni di compilazione é ancora possibile ottenere del software molto piu performante di come lo sarebbe un ipotetico corrispettivo managed, specialmente nel caso di grossi progetti, se non altro perché in C++ puoi fare tutto quello che puoi fare in Java piu molto altro ancora.
inoltre tieni presente che io di norma non mi azzarderei mai a mettere le performances del software finale al primo posto per la scelta del linguaggio e degli strumenti; valgono due importanti regole:
1) il tempo-uomo vale molto di piu del tempo macchina; devi sempre essere ben disposto a sacrificare un 10% di velocitá per ottenere un 10% di produttivitá (cioé ad esempio per ottenere una prima versione usabile del prodotto con settimane di anticipo).
2) early optimization is the root of all evil; se pensi fin da ora alle performance tu stai ottimizzando troppo presto: lo stai facendo prima ancora di aver scritto il software :D
o dimentico qualche altro particolare? Io pensavo a Java dato che lo conosco un po' meglio ma posso sempre cambiare idea, ora ho aperto questo post vedo un po' cosa mi consigliate e poi vedrò :cool: vedi tu, Java in questo caso ti offre degli strumenti che non ti sono necessari. garbage collector? per un progetto cosi grosso ha senso realizzarne uno ad hoc, non general purpose e quindi piu piccolo ed efficiente; il C++ da questo punto di vista ti fa fare tutti i virtuosismi sintattici che vuoi.
bound checking sugli indici usati per accedere agli array? fatti un template, una classe che implementa gli array con l'operatore [] overloadato che fa il bound checking solamente nelle build di debug; ci metti 5 minuti contati e hai array sicuri e piu efficienti che in Java.
l'unico aspetto negativo che riesco ad individuare nell'intraprendere in C++ un progetto simile sono gli innumerevoli problemi di memoria corrotta di cui potenzialmente soffre il C++: in Java non esistono puntatori, tutti i riferimenti sono sicuri o nulli, in C++ invece hai i dangling pointers. se hai molta esperienza col C++ fallo in C++ altrimenti non so aiutarti. io, peccando grandemente di modestia, al posto tuo lo farei in C++.
+HookTheGhost+
09-02-2009, 18:16
grazie delle dritte :D
il problema comunque resta come diceva MadJackal che non sono molto ferrato sul funzionamento di X in entrambi i linguaggi non so che tipo di librerie esistano :stordita:
grazie delle dritte :D
il problema comunque resta come diceva MadJackal che non sono molto ferrato sul funzionamento di X in entrambi i linguaggi non so che tipo di librerie esistano :stordita: ecco, mi hai ricordato che Java nel tuo caso oltre ad offrirti un sacco di cose che non ti servono introduce anche lo sbattimento dovuto all'accedere a X tramite JNI :D
le normali applicazioni Java non accedono alle API di X: in Java c'é Swing, ma non é quello che fa per te.
+HookTheGhost+
09-02-2009, 18:31
in C++ che librerie si usano? sapresti i link a delle documentazioni o dei libri da leggere a riguardo?
Per chiacchierare con X in Java puoi usare le librerie escher (http://escher.sourceforge.net/). La documentazione lascia un po' a desiderare... ok lascia molto a desiderare ma pare che funzioni (lo dico per sentito dire perchè io di X ne so quanto di fusione nucleare).
+HookTheGhost+
10-02-2009, 14:00
Per chiacchierare con X in Java puoi usare le librerie escher (http://escher.sourceforge.net/). La documentazione lascia un po' a desiderare... ok lascia molto a desiderare ma pare che funzioni (lo dico per sentito dire perchè io di X ne so quanto di fusione nucleare).
Nada a me non funzionanto ho provato a lanciare il programma di prova Hello come specificato da quel poco di documentazione che hanno e mi restituisce un'eccezione dicendomi che è stata rifiutata la connessione....
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.