Okay, jeg har fundet problemet.
Det er ikke fordi at pr.destroy() ikke virker. Problemet ligger i at jeg har skrevet dette program med Threads.
Når mit Thread der starter dette program er færdigt, så bliver min Process, pr, smidt i gc'en .. jeg starter så et nyt Thread for at stoppe programmet igen, men i stedet for at kalde pr.destroy() til den process som kører mit program bliver den kaldt til en pr som er sat til null...
Jeg vil nu høre om der er nogen som har et forslag til hvordan jeg kan få min Process gemt så jeg kan finde den frem igen når jeg har behov for det?
import java.io.*;
import java.net.*;
import java.util.*;
public class Server extends Thread {
private ServerSocket server;
public static void main(String argv[]) throws Exception {
new Server();
}
public Server() throws Exception {
server = new ServerSocket(3000);
System.out.println("Server listening on port 3000.");
this.start();
}
public void run() {
while(true) {
try {
System.out.println("Waiting for connections.");
Socket client = server.accept();
System.out.println("Accepted a connection from: "+
client.getInetAddress());
Connect c = new Connect(client);
} catch (Exception e) {
}
}
}
class Connect extends Thread {
private Socket client = null;
private ObjectInputStream ois = null;
private ObjectOutputStream oos = null;
public Connect() {}
public Connect(Socket clientSocket) {
client = clientSocket;
try {
ois = new ObjectInputStream(client.getInputStream());
oos = new ObjectOutputStream(client.getOutputStream());
} catch(Exception e1) {
try {
client.close();
}catch(Exception e) {
System.out.println(e.getMessage());
}
return;
}
this.start();
}
public void run() {
String cmd = null;
Playlist p = null;
Runtime rt = null;
Process pr = null;
try {
while(true) {
cmd = (String)ois.readObject();
if (cmd.substring(0, cmd.indexOf('#')).equals(new String("getPlaylist"))) {
p = new Playlist();
p.createFileList(cmd.substring(cmd.indexOf('#')+1));
for (int i = 0; i < p.musicArray.size()-1; i++) {
oos.writeObject((File)p.musicArray.get(i));
oos.flush();
}
}
if (cmd.substring(0, cmd.indexOf('#')).equals(new String("playSong"))) {
try{
rt = Runtime.getRuntime();
pr = rt.exec("/usr/bin/./mpg321 " + cmd.substring(cmd.indexOf('#')+1));
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
if (cmd.substring(0, cmd.indexOf('#')).equals(new String("stopSong"))) {
String status = "Song Stopped";
//System.out.println(pr.exitValue());
pr.destroy();
oos.writeObject(status);
oos.flush();
}
// close streams and connections
ois.close();
oos.close();
client.close();
}
} catch(Exception e) {
}
}
}
}
som i kan se ligger min pr (Process) i Connect klassen, og vil derfor forsvinde når mit Thread er færdigt...