Gå til innhold

[Løst] Lage kommandoer i en Java applikasjon


Anbefalte innlegg

Videoannonse
Annonse

Så du vil ha innput fra kommandolinjen til java-programmet? http://www.mkyong.com/java/how-to-read-input-from-console-java/

Ja, på en møte. Men, jeg vil ikke at applikasjonen skal stanse i mens det går an å skrive. Applikasjonen skal alltid kjøre, men man skal alltid ha muligheten til å utføre en kommando i kommandolinjen. På en måte at en event kjøres når man trykker enter.

Lenke til kommentar

Da må du bruke flere tråder. Enten lager du en ny tråd som gjør det applikasjonen skal gjøre, eller du lager en ny tråd som venter på input fra brukeren.

 

Edit: Emancipate var raskere enn meg. Her er et eksempel på hvordan det kan gjøres:

public class Program {

  private static class Application extends Thread {

    private volatile boolean doContinue = true;

    public void run() {
      System.out.println("Application started!");
      do {
        // application code​
      } while (doContinue);
      System.out.println("Application stopped!");
    }

    public void handleCommand(String cmd) {
      if (cmd.length() == 0) return;
      if (cmd.equalsIgnoreCase("quit"))
        doContinue = false;
      else
        System.out.println("Unknown command: '" + cmd + "'");
    }

  }

  public static void main(String[] args) {
    Application app = new Application();
    app.start();
    java.util.Scanner scanner = new java.util.Scanner(System.in);
    String cmd = null;
    do {
      System.out.print("> ");
      cmd = scanner.nextLine().trim();
      app.handleCommand(cmd);
    } while (!cmd.equalsIgnoreCase("quit"));
  }

}

Endret av jonny
  • Liker 1
Lenke til kommentar

Bare gjorde det slikt jeg:

	public static void main(String[] args){
		commandHandler(null);
	}

	private static void commandHandler(final Scanner lastScanner){
		Runnable r = new Runnable() {
			public void run() {
				Scanner scanner = lastScanner;
				if (scanner == null) scanner = new Scanner(System.in);
				String command = scanner.nextLine();
				commandHandler(scanner);
				executeCommand(command);
			}
		};
		new Thread(r).start();
	}

Men noe jeg synes er litt unaturlig er at kommandoen blir utført på en annen Thread, men jeg antar det ikke har så veldig mye å si. Det finnes vell ikke tilfeldigvis en kjapp fiks for det?

Endret av waremanu
Lenke til kommentar

Bare gjorde det slikt jeg:

...

Men noe jeg synes er litt unaturlig er at kommandoen blir utført på en annen Thread, men jeg antar det ikke har så veldig mye å si. Det finnes vell ikke tilfeldigvis en kjapp fiks for det?

 

Hva mener du? Kommandoen blir utført av den tråden som tar imot brukerens kommando, etter at du først starter en ny tråd som tar imot brukerens neste kommando?

Endret av jonny
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...