Aplikacja, która sprawdza, czy jest już uruchomiona

0

Witam.
Chciałbym, aby moja aplikacja sprawdziła, czy nie jest czasem już uruchomiona. Chodzi mi o to, żeby jedna aplikacja nie była uruchomiona kilka razy. Da się jakoś to sprawdzić?

0

A co gdybys zapisal w jakims pliku czy gdzie kolwiek, 0 , i jak sie wlacza aplikacja to zamienia to na 1 a jak wylacza to zmienia to na 0. I jezeli odpali sie drugi raz jednoczesnie to po prostu w pliku bedzie 1, sie wylaczy.

0

Zrób klasę główną według modelu Singleton, wtedy na bank będzie uruchomiona tylko raz.

0

@qba7878 - nie, nie i jeszcze raz nie. Nie wprowadzaj ludzi w błąd.

Co do samego zadania - musisz się odwołać do czegoś zewnętrznego i "fizycznego". Możesz (jeśli to Winda) wpisywać jakąś wartość do rejestru - jest to znacznie pewniejsza metoda niż plik (bo plik Ci ktoś usunie, przeniesie, etc). Możesz wykluczanie zorganizować przez socket. Poszukaj informacji na ten temat w google. Teoretycznie możesz użyć System,setProperty()...

Pozdrawiam,

0

cytując za pierwszym wyszukanym guglem:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Uan {
	private static final int RUN_PORT = 9666; 
	public static void main(String[] arg){ 
	        try{
	                java.net.ServerSocket ss = new java.net.ServerSocket(RUN_PORT);
	                String x;
	                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	                x=br.readLine();
	        }catch (java.net.BindException ex){ 
	                System.out.println("Program already running"); 
	                System.exit(1); 
	        } 
	      catch (java.io.IOException ex){ 
	                ex.printStackTrace(); 
	                System.exit(1); 
	        } 
	}
}

koniec cytatu...

pzdr.

0

A co się dzieje jeśli z portu RUN_PORT korzysta inny program ?

0

@bogdans jest to niestety jeden ze znanych drawbacków tej metody...

0

@Shimmi, sterowanie błędami jest złe.

Jednak nie da sie tego uniknąć. Można zamiast socketu tworzyć plik tymczasowy, który będzie usuwany gdy program kończy działanie.

0

Warto też sprecyzować znaczenie zwrotu aplikacja jest uruchomiona. Załóżmy, że mamy dwa identyczne pliki Foo.jar jeden w katalogu k1, drugi w k2. Dajemy polecenie (w k1) java -jar Foo.jar. Czy identyczne polecenie (w k2) jest ponownym uruchomieniem aplikacji ? Jeśli tak. to sposoby z plikami tymczasowymi są kiepskie - pliki tymczasowe powinny mieć adresy względne.
Drugi problem. Mamy na komputerze dwie JVM (j1 i j2). Zapewne kolejne polecenia j1 -jar Fpp.jar j2 -jar Foo.jar powinno być traktowane jak ponowne uruchomienie aplikacji. Wtedy kiepskie są metody z singletonami, czy też polami statycznymi w klasie, które nie pozwolą na utworzenie drugiej instancji danej klasy.

0

Dlatego można skorzystać ze ścieżek bezwzględnych np. katalogu domowego użytkownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1