Gå til innhold

Starte javprogram uten konsoll?


Anbefalte innlegg

Har laget et program nå, men når jeg skal starte programmet via en bat-fil fra explorer dukker windowskonsollen (kommandovinduet) opp i bakgrunnen. Finnes det noen måte å starte programmet uten konsollen? Programkode eller kompileringsmåte?

Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Takker, fant ut av det. Problemet var at hvis jeg kjørte javaw.exe via en .bat-fil, ville bat-filen åpne konsollen, selv om javaw.exe ikke gjør det.

Kan sikkert slå av konsoll for batfiler, men det blir en lokal innstilling. Vil gjerne ha det vekk for hvilken som helst maskin. Mulig det går an å lage noe i assembly.

Lenke til kommentar

Du trenger ikke assembly. Du kan kjøre batchfiler direkte fra java, da kommer det ikke opp noen konsoll. Prøv noe slikt som dette (går ut i fra at du jobber i windows):

 


       String cmd[] = {"C:\\WINDOWS\\system32\\cmd.exe", "/c", "c:\\test.bat"};
       Runtime rt = Runtime.getRuntime();
       try {
           Process prcs = rt.exec(cmd);
       } catch (IOException e) {
           e.printStackTrace();
       }

 

(har du annen windowspath må du selvsagt forandre den)

 

Det virker som om noen batchfiler behandles strengere enn ellers når de kjøres på denne måten - blant annet det må angis extension til programfiler i batchfila.

 

Ved å kalle getInputStream() på prosessen kan du fange opp output fra batchfila.

Lenke til kommentar

Ved nærmere ettertanke var det kanskje ikke dette du prøvde på.

 

Den greieste måten å starte et javaprogram på uten å vise konsollen er å legge programmet i en kjørbar .jar-fil. Da kan du starte programmet ved å dobbeltklikke på .jar-fila. Dette er veldig enkelt for eksempel i Eclipse, men er også greit å gjøre for hånd:

  • Legg alle filene i en zip fil
  • Gi zip-filen extensionen .jar
  • lag en katalog med navnet META-INF i zipfilen
  • I katalogen META-INF lager du en fil med navn MANIFEST.MF
  • I MANIFEST.MF legger du til teksten:
    Manifest-Version: 1.0
    Main-Class: pakkeNavn.klasseNavn

Du må selvsagt bytte ut pakkeNavn og klasseNavn med det som passer for klassen du har main-metoden i.

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å
×
×
  • Opprett ny...