Aplicații desktop în Java, pentru locurile unde browserul nu ajunge

Există operațiuni pe care un tab de browser nu le rezolvă: scanare continuă de coduri de bare, cântare și imprimante de etichete conectate pe serial, introducere de date opt ore pe zi la tastatură, sau un depozit în care Wi-Fi-ul pică de trei ori pe tură.

Aplicația desktop a fost declarată moartă de vreo cincisprezece ani. Între timp, în depozite, hale de producție și puncte de recepție, oamenii lucrează în continuare în aplicații instalate — pentru că acolo contează accesul la hardware, viteza la tastatură și funcționarea fără rețea.

Construim aceste aplicații în Java, cu JavaFX pentru interfețe noi și Swing atunci când preluăm sau extindem un sistem existent. Le împachetăm cu jpackage: utilizatorul primește un installer normal — .msi pe Windows, .dmg pe macOS, .deb sau .rpm pe Linux — fără să știe ce e un JRE și fără să instaleze nimic separat.

Partea importantă: aplicația desktop nu e un sistem paralel. Vorbește cu același backend ca site-ul și aplicația mobilă. O comandă introdusă la recepția de marfă e vizibilă imediat în dashboard-ul web și în telefonul agentului de vânzări.

Ce construim

Interfețe pentru muncă intensivă

Tabele cu zeci de mii de rânduri care rămân fluide, navigare completă de la tastatură, scurtături configurabile, formulare gândite pentru operatori care le folosesc toată ziua și nu se uită la ecran.

Funcționare offline cu sincronizare

Bază de date locală (SQLite sau H2), coadă de operațiuni nesincronizate, reconciliere la revenirea conexiunii și reguli explicite de rezolvare a conflictelor. Operatorul continuă să lucreze; sincronizarea e problema aplicației, nu a lui.

Integrare cu hardware

Cititoare de coduri de bare și QR, imprimante de etichete Zebra sau TSC prin ZPL/EPL, cântare pe port serial, cititoare de carduri, semnătură pe tabletă, imprimante fiscale, scanere de documente.

Instalare și actualizare gestionată

Installer nativ semnat digital cu jpackage, plus actualizare automată la pornire. Nu trimiți un IT-ist la 40 de stații la fiecare versiune nouă.

Rapoarte și export local

Generare de PDF și Excel direct pe stație, tipărire în lot, șabloane pe care le poate modifica cineva din firmă fără să recompileze aplicația.

Modernizarea aplicațiilor Swing existente

Migrare de la Java 8 la o versiune LTS actuală, înlocuire treptată a ecranelor cu JavaFX, curățare de dependențe abandonate — fără să oprim producția cât timp lucrăm.

Tehnologii

UI desktop

  • JavaFX
  • Swing
  • FXML & CSS
  • AtlantaFX
  • ControlsFX

Împachetare

  • jpackage
  • jlink
  • installer .msi / .dmg / .deb
  • semnare digitală
  • auto-update

Date locale

  • SQLite
  • H2
  • JPA / Hibernate
  • sincronizare pe coadă

Comunicare

  • REST
  • WebSocket
  • gRPC
  • port serial (jSerialComm)
  • ZPL / EPL

Rapoarte

  • JasperReports
  • Apache POI
  • PDFBox

Se potrivește dacă

  • ai un depozit sau o hală în care conexiunea nu e garantată
  • operatorii tăi introduc date multe ore pe zi și viteza contează
  • ai nevoie de acces direct la imprimante de etichete, cântare sau scanere
  • ai o aplicație Swing veche pe care nimeni nu mai vrea să o atingă
  • vrei ca desktop, web și mobil să vadă aceleași date, în timp real

Întrebări frecvente

De ce desktop și nu o aplicație web?

Pentru trei motive concrete: acces la hardware local, funcționare fără internet și viteză la introducerea manuală de date. Dacă niciunul nu se aplică în cazul tău, îți recomandăm aplicație web — e mai ieftină de livrat și de întreținut. Nu vindem desktop unde nu e nevoie.

Utilizatorii trebuie să instaleze Java separat?

Nu. Cu jpackage, runtime-ul Java e împachetat în installer. Utilizatorul primește un program care se instalează ca oricare altul și apare în meniul Start sau în Applications.

Funcționează pe Windows, Mac și Linux?

Da, din același cod. Fiecare installer trebuie construit pe sistemul respectiv — asta se configurează o singură dată în pipeline-ul de CI și după aceea rulează automat la fiecare versiune.

Cum se comportă offline, în detaliu?

Aplicația scrie în baza de date locală și pune fiecare operațiune într-o coadă. Când conexiunea revine, coada se trimite în ordine către server. Conflictele — de exemplu același stoc modificat din două locuri — se rezolvă după reguli pe care le stabilim explicit la analiză, nu după noroc.

Poate rula pe stațiile vechi din depozit?

De obicei da. JavaFX merge rezonabil și pe hardware modest; ne spui ce ai și îți confirmăm înainte să promitem ceva. Am întâlnit destule depozite cu stații de zece ani care funcționează perfect pentru scopul lor.

Discutăm concret

Ai un proiect de acest tip?

Scrie-ne pe WhatsApp sau pe e-mail cu două-trei propoziții despre ce ai nevoie. Îți răspundem cu întrebările care contează și cu o estimare de buget și durată.

Fără obligații, fără insistențe ulterioare.