Desarrollé una aplicación de desplazamiento pero cada vez que ejecuta la aplicación se abre una nueva ventana. Quiero que si una ventana ya está abierta, otras no permitan abrir.solo una ventana de marco abatible abierta en el tiempo
Respuesta
Here es un ejemplo de un Java aplicación de instancia única:
Una aplicación de instancia única es uno que sólo permite la 1 de la aplicación se ejecute, no importa cuántas veces el usuario intenta iniciar.
La aplicación intenta abrir un Socket en un puerto específico. En caso de que otra instancia de su aplicación ya se esté ejecutando, la apertura del socket falla.
Esto ya debería ser suficiente para usted, por lo que no tendría que usar la parte del código utilizada para registrar nuevas aplicaciones en la primera iniciada.
El uso de un zócalo tiene una gran ventaja en comparación con escribir algún tipo de indicador en el sistema de archivos/registro/lo que sea:
Se elimina incluso si su aplicación falla.
De hecho, parece que solo quiere una aplicación abierta a la vez. En cuyo caso, ¿por qué no sacar un bloqueo de archivo o similar cuando se ejecuta la aplicación y verificarlo al iniciarse? El dolor de cabeza (por supuesto) es la limpieza de ese bloqueo en el caso de que su programa no salga limpiamente.
Mi solución preferida es, como Peter Lang vinculada a, usar Sockets. Cuando se inicia la aplicación, puede iniciar un socket de servidor para escuchar las conexiones entrantes en el host local (más el puerto de su elección). Antes de que esto ocurra en su código, puede intentar establecer una conexión con el servidor y si tiene éxito, debe saber que ya hay otra instancia abierta, por lo que puede cerrar la instancia actual con un mensaje apropiado.
En la implementación del socket del servidor también puede agregar la funcionalidad de que al recibir una conexión entrante, se fuerza a la instancia actual de la aplicación al primer plano.
public class Samp {
JFrame f=new JFrame();
File ff=new File("D:\\a.txt");
FileWriter fw;
public Samp() {
f.setBounds(0, 0, 200, 200);
try {
Scanner sc=new Scanner(ff);
if(!sc.hasNext()) {
fw=new FileWriter(ff);
fw.write("Running");
fw.close();
} else {
System.exit(0);
}
} catch(Exception e) {
System.out.println(e.getMessage());
}
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
try {
Scanner sc = new Scanner(ff);
if(sc.hasNext()) {
fw=new FileWriter(ff);
fw.write("");
fw.close();
}
} catch (Exception ex) { }
}
};
f.setVisible(true);
f.addWindowListener(wndCloser);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new Samp();
}
}
¿Te refieres a ejecutar la interfaz gráfica de usuario como un Singleton ?, yo he hecho esto en el pasado haciendo una estática "gestor de vista" privada tal que es nula y no se ha creado o visible hasta que la primera vez que la interfaz gráfica de usuario se crea, después de eso al igual que con un singleton clásico, la GUI se configura como visible cuando la aplicación se ejecuta de nuevo ... Tengo un par de Frameworks que siguen este diseño - En estos marcos, la GUI no es "primaria" allí son también línea de comando y las interfaces similares para que la GUI se invoque a través de la línea de comando ...
¡Utilice el patrón Singletone como se muestra en el example!
- 1. ¿Cómo puedo imprimir una ventana abatible para que se ajuste bien en una sola página?
- 2. Cómo cerrar una ventana abierta de eclipse
- 3. Agregar contenido a una nueva ventana abierta
- 4. Solo tengo una ventana de información abierta en la API de Google Maps v3
- 5. OleDbConnection() abre un archivo de Excel en cualquier ventana abierta de Excel. Pero no, si no hay una ventana abierta
- 6. última ventana abierta por window.open
- 7. ¿Cómo cierro una ventana abierta automáticamente en Emacs?
- 8. X/Gnome: cómo medir la geometría de una ventana abierta
- 9. ¿Cómo obtener PowerShell para mantener abierta una ventana de comando?
- 10. cambiar la URL de una ventana emergente ya abierta
- 11. ExtJS ventana abierta con altura máxima
- 12. ventana del navegador abierta del programa Java
- 13. GLFW Alternar el modo de ventana abierta a pantalla completa
- 14. ventana abierta y onclick tamaño específico
- 15. ¿Cómo mantener abierta la ventana emergente cuando la orientación cambia en el tiempo de ejecución en Android?
- 16. Aplicaciones de consola abierta de Eclipse en ventana separada
- 17. diferencia entre marco y ventana en emacs
- 18. Escuchar al cambio de URL en la ventana abierta
- 19. Llamar al símbolo del sistema y dejar la ventana abierta
- 20. sql conexión abierta en modo de solo lectura
- 21. ¿Cómo saber si una ventana con un título dado ya está abierta en Tk?
- 22. Cómo obtener hWnd de la ventana abierta por ShellExecuteEx .. hProcess?
- 23. página abierta GWT en una nueva pestaña
- 24. de raqueta: el uso de eventos en una ventana de marco
- 25. Imagen de fondo para una ventana en el marco de Cocoa
- 26. ¿Cómo obtener el ancho de un marco de ventana antes de crear cualquier ventana?
- 27. Determinar si una ventana abierta de WPF está visible en cualquier monitor
- 28. ¿Cómo puedo verificar si hay una URL abierta en otra ventana?
- 29. SQLDependency_OnChange-Event activa solo una vez Tiempo
- 30. ¿buen proyecto de fuente abierta que usa el Marco de inyección de dependencia?
Usar el socket parece una idea muy útil, mucho más confiable que el bloqueo de archivos que mencioné. –
Gracias por responder La solución dada por usted está funcionando perfectamente. – chetan
¿Pero qué número de puerto usar? Personalmente, asignaría un puerto en tiempo de ejecución, y parece inevitable escribir en un pequeño archivo en el directorio temporal para guardar el número de puerto elegido. –