Gå til innhold

JavaFX, MySQL og Kjørbar Jar-fil


Anbefalte innlegg

Hei,

 

Har et prosjekt jeg har laget i JavaFX med GUI. Har derfor en login screen som sjekker mot users_table i en mySQL DB jeg har hostet på Herouku. 

Når jeg pakker fila (via maven) til en kjørbar Jar-fil, så skjer det absolutt ingenting når jeg prøver å logge inn. Kjører jeg programmet i Eclipse, så fungerer alt strålende. Noen som har en ide om hva det kan skyldes? 

Jeg har lagt ved mySQL dependencies i pom-fila, uten at det hjalp noe. 

Har prøvd å google litt, uten at det hjalp nevneverdig. 

 

Lenke til kommentar
Videoannonse
Annonse

Hvordan er maven konfigen din for å lage kjørbar fil?

Hvordan prøver du å kjøre den? Edit: Ser nå at den starter opp, så da er dette neppe relevant.

Har du det i et public repo så kan jeg og andre titte og komme med forslag?

 

Edit2: Du kan legge inn debug printing for å se mer av hva som skjer. Mange har ofte dårlig exception-håndtering og da ser man ikke nødvendigvis spor av de feilene som skjer, så det er i hvert fall noe du kan dobbeltsjekke, særlig rundt kall til eksterne tjenester. Ikke at det egentlig er problemet, men det gir jo gode hint om hva problemet er dersom du får en exception :)

Endret av nirolo
Lenke til kommentar
nirolo skrev (8 timer siden):

Hvordan er maven konfigen din for å lage kjørbar fil?

Hvordan prøver du å kjøre den? Edit: Ser nå at den starter opp, så da er dette neppe relevant.

Har du det i et public repo så kan jeg og andre titte og komme med forslag?

 

Edit2: Du kan legge inn debug printing for å se mer av hva som skjer. Mange har ofte dårlig exception-håndtering og da ser man ikke nødvendigvis spor av de feilene som skjer, så det er i hvert fall noe du kan dobbeltsjekke, særlig rundt kall til eksterne tjenester. Ikke at det egentlig er problemet, men det gir jo gode hint om hva problemet er dersom du får en exception :)

Hei, og takk for svar :)

 

Jeg har et repo som jeg mener nå skal være up2date. Merk at jeg er enda student, og dette prosjektet er bare en videre utvidelse av prosjektet. Database var ikke pensum, og jeg har derfor lagt til dette for å "leke meg", og får følgelig ikke noe ytterligere hjelp av studasser. 

Det er nok også en del spagetti-kode, men det fungerer som tiltenkt i alle fall. 

 

Logginga mi og feilhåndtering er trolig rævva, og også derfor jeg er litt rådvill. Må prøve å lage noe slags god logging, så jeg ser bedre hva som skjer ila helga. 

Edit: Kjører jeg dog jar-fila fra terminalen får jeg dette: 
image.thumb.png.0919c3aa9beb22842f1118988feaaeb8.png

 

Av en eller annen grunn har jeg fått for meg at det likevel er DB'en som gjør at jeg ikke kommer forbi login-vinduet. 

Prosjektet buildes jo successfully, men med et par warnings (ikke errors). 

 

EDIT: fjerna personlig github. 

 

 

Endret av iblazeqt
Lenke til kommentar

Det du har tatt bilde av fra terminalen er veldig bra!

Når man ser på en stacktrace (som det er) så er det ofte lurt å gå så langt ned som mulig, der er nemlig roten til problemet:
Nesten helt nederst der ser du at det står: "Caused by: java.lang.NullPointerException: Location is required." Så kan du se på den nest nederste linja, der står det hvor dette skjer: "at bookingsystem.LoginController.loginBtn(LoginController.java:43)" Dvs linje 43 i LoginController.java som du har skrevet. Der er det noe som er null, dvs uten noen verdi, som du forutsetter at har en verdi.

Når vi ser på hva den linja inneholder

window1.setScene(new Scene(FXMLLoader.load(getClass().getResource("login.fxml"))));

så er det ikke nødvendigvis åpenbart hva problemet er :(

Du kan splitte opp denne over flere linjer for å prøve å finne ut hva som går galt, gjerne slenge på try/catch rundt - eller så kan du google feilmeldingen :)

Jeg har googlet "Location is required" det for deg og fikk https://stackoverflow.com/questions/28266492/location-is-required-exception-when-loading-fxml-file og https://stackoverflow.com/questions/20507591/javafx-location-is-required-even-though-it-is-in-the-same-package som treff. Begge kommer med nyttige forslag til hvordan du kan løse problemet ditt - nøyaktig hva riktig løsning er har jeg ikke sjekket, men dette er jo gode hint som kanskje løser problemet for deg. Xml-fila du prøver å lese er enten ikke med i jar-fila, eller så klarer ikke java å finne den på den måten du gjør det.

 

PS! Koden din er ikke noe å skamme seg over, den er lettlest og helt ok - særlig med tanke på at du fortsatt er student.

PS2! Det å få med seg alt av xml-filer og denslags når man lager en runnable jar er et kjent problem og noe som folk kløner til støtt og stadig også i arbeidslivet. Det er også veldig vanlig at denslags feil havner i innsjekket kode, fordi ting er anderledes når du kjører det i eclipse/intellij og når det kjøres på en virkelig server eller klient.

  • Hjerte 1
Lenke til kommentar
nirolo skrev (1 time siden):

Det du har tatt bilde av fra terminalen er veldig bra!

Når man ser på en stacktrace (som det er) så er det ofte lurt å gå så langt ned som mulig, der er nemlig roten til problemet:
Nesten helt nederst der ser du at det står: "Caused by: java.lang.NullPointerException: Location is required." Så kan du se på den nest nederste linja, der står det hvor dette skjer: "at bookingsystem.LoginController.loginBtn(LoginController.java:43)" Dvs linje 43 i LoginController.java som du har skrevet. Der er det noe som er null, dvs uten noen verdi, som du forutsetter at har en verdi.

Når vi ser på hva den linja inneholder


window1.setScene(new Scene(FXMLLoader.load(getClass().getResource("login.fxml"))));

så er det ikke nødvendigvis åpenbart hva problemet er :(

Du kan splitte opp denne over flere linjer for å prøve å finne ut hva som går galt, gjerne slenge på try/catch rundt - eller så kan du google feilmeldingen :)

Jeg har googlet "Location is required" det for deg og fikk https://stackoverflow.com/questions/28266492/location-is-required-exception-when-loading-fxml-file og https://stackoverflow.com/questions/20507591/javafx-location-is-required-even-though-it-is-in-the-same-package som treff. Begge kommer med nyttige forslag til hvordan du kan løse problemet ditt - nøyaktig hva riktig løsning er har jeg ikke sjekket, men dette er jo gode hint som kanskje løser problemet for deg. Xml-fila du prøver å lese er enten ikke med i jar-fila, eller så klarer ikke java å finne den på den måten du gjør det.

 

PS! Koden din er ikke noe å skamme seg over, den er lettlest og helt ok - særlig med tanke på at du fortsatt er student.

PS2! Det å få med seg alt av xml-filer og denslags når man lager en runnable jar er et kjent problem og noe som folk kløner til støtt og stadig også i arbeidslivet. Det er også veldig vanlig at denslags feil havner i innsjekket kode, fordi ting er anderledes når du kjører det i eclipse/intellij og når det kjøres på en virkelig server eller klient.

Takk for veldig god tilbakemelding! :) Ja - pakking av prosjektet var ikke en del av pensum det heller, og noe jeg har styret en del med, for å få til. Trodde det skulle bare være å eksportere i Eclipse, men den gang ei (JavaFX...). 

Ja - jeg skal prøve å debugge og forske litt på hvorfor den ikke klarer å komme til scene 2. Begge mine fxml-filer ligger på samme sted i prosjektet. Men mulig jeg mangler noe trivielt som har gått meg hus forbi. Takk for at du tok deg tid! : ))) 

Lenke til kommentar
nirolo skrev (2 timer siden):

Det du har tatt bilde av fra terminalen er veldig bra!

Når man ser på en stacktrace (som det er) så er det ofte lurt å gå så langt ned som mulig, der er nemlig roten til problemet:
Nesten helt nederst der ser du at det står: "Caused by: java.lang.NullPointerException: Location is required." Så kan du se på den nest nederste linja, der står det hvor dette skjer: "at bookingsystem.LoginController.loginBtn(LoginController.java:43)" Dvs linje 43 i LoginController.java som du har skrevet. Der er det noe som er null, dvs uten noen verdi, som du forutsetter at har en verdi.

Når vi ser på hva den linja inneholder


window1.setScene(new Scene(FXMLLoader.load(getClass().getResource("login.fxml"))));

så er det ikke nødvendigvis åpenbart hva problemet er :(

Du kan splitte opp denne over flere linjer for å prøve å finne ut hva som går galt, gjerne slenge på try/catch rundt - eller så kan du google feilmeldingen :)

Jeg har googlet "Location is required" det for deg og fikk https://stackoverflow.com/questions/28266492/location-is-required-exception-when-loading-fxml-file og https://stackoverflow.com/questions/20507591/javafx-location-is-required-even-though-it-is-in-the-same-package som treff. Begge kommer med nyttige forslag til hvordan du kan løse problemet ditt - nøyaktig hva riktig løsning er har jeg ikke sjekket, men dette er jo gode hint som kanskje løser problemet for deg. Xml-fila du prøver å lese er enten ikke med i jar-fila, eller så klarer ikke java å finne den på den måten du gjør det.

 

PS! Koden din er ikke noe å skamme seg over, den er lettlest og helt ok - særlig med tanke på at du fortsatt er student.

PS2! Det å få med seg alt av xml-filer og denslags når man lager en runnable jar er et kjent problem og noe som folk kløner til støtt og stadig også i arbeidslivet. Det er også veldig vanlig at denslags feil havner i innsjekket kode, fordi ting er anderledes når du kjører det i eclipse/intellij og når det kjøres på en virkelig server eller klient.

 

 

 

Da fikk jeg løst det :)

Endra dette

image.png.588cb50a5482ff96bf89d48a5eb0d61d.png

til dette: 
image.png.caeee06f2e7b01e5a5398589e6a6692e.png
 

Den windo1.setScene var der bare fordi jeg drev å testa noe annet, og prøvde litt forskjellige utfall. Så hadde jeg gitt bang i å rydde opp.. Virker mye mer intuitivt å forsøke å ny scene gitt at tilkoblingen til DB'en og userinfo blir skrevet riktig, også vise den. 

Flytta også fxml-fila til src/main/resources - tror ikke det var utslagsgivende dog, men ikke 100% sikker :)

Lenke til kommentar
iblazeqt skrev (10 minutter siden):

Flytta også fxml-fila til src/main/resources - tror ikke det var utslagsgivende dog, men ikke 100% sikker

src/main/resources er default folderen som maven tar med resource-filer fra, så kan være avgjørende om du ikke spesifiserer en annen folder til maven.

Uansett bra det løste seg!

Endret av nirolo
  • Liker 1
Lenke til kommentar
  • 3 uker senere...
nirolo skrev (På 1.5.2021 den 11.39):

PS! Koden din er ikke noe å skamme seg over, den er lettlest og helt ok - særlig med tanke på at du fortsatt er student.

Absolutt helt enig, og når man holder på med å få på plass sånne ting så er det ofte lettest å ha "alt på ett sted" i begynnelsen. Men et tips her er å bygge om litt til såkalt lagdelt arkitektur etter hvert, slik at gui'et forholder seg til et tjeneste-api, og tjeneste-laget forholder seg til et data-lag, hvor all interaksjon med databasen er innkapslet. Divide and conqueror. Etter hvert kan man også begynne å tenke på om du skal splitte dette opp i en gui-app som snakker med ulike micro-services på backend-siden. Det er sjelden lurt å gå for full-blown microservicearkitektur fra dag én, men det er ofte lurt å strukturere appen som om den skal deles opp senere, det vil uansett gi en ryddigere arkitektur. Ta en kikk på Spring Boot eller lignende rammeverk, da får du veldig mye gratis.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...