Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
package de.tutorials.training;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.swing.JOptionPane;
public class WatchedAppExample {
public final static int trackerPort = 9999;
public static void main(String[] args) throws Exception {
new WatchedAppExample().run();
}
private void run() throws Exception {
startTrackerServer();
TimeUnit.SECONDS.sleep(1);
startTrackerClient();
appLogic();
}
private void appLogic() throws InterruptedException {
while (true) {
System.out.println("working ...");
TimeUnit.SECONDS.sleep(1);
}
}
private void startTrackerServer() {
Executors.newSingleThreadExecutor().execute(newTrackerServer());
}
private Runnable newTrackerServer() {
return new Runnable() {
@Override
public void run() {
try {
ServerSocket ss = new ServerSocket(trackerPort);
Socket s = ss.accept();
OutputStream out = s.getOutputStream();
while (true) {
out.write(1);
out.flush();
TimeUnit.SECONDS.sleep(1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
}
private void startTrackerClient() throws Exception {
new ProcessBuilder("cmd", "/c", "start", "javaw", "-cp", new File(
getClass().getProtectionDomain().getCodeSource().getLocation()
.toURI()).getAbsolutePath(),
TrackerClient.class.getName()).start();
}
public static class TrackerClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", trackerPort);
InputStream in = socket.getInputStream();
try {
while (true) {
int b = -1;
while ((b = in.read()) != -1) {
}
}
} catch (IOException e) {
// e.printStackTrace(); app killed
}
JOptionPane.showMessageDialog(null, "The app was killed!");
}
}
}
Cannot run program "cmd": java.io.IOException: error=2, No such file or directory
Ja das ist ja nur ein kleines exemplarisches Beispiel. Den Prozess-fork plattformunabhängig zu machen ist auch kein großes Problem, für das Beispiel wollte ich nicht gleich die ganz große Keule schwingen ;-)...ist jetzt leider nicht mehr das, was Java sein soll. Und zwar Cross-Plattform. Ich bekomme nur folgendes...