Я знаю, что это уже обсуждалось несколько раз, но я не могу найти подходящее решение для моей проблемы.Я хочу запустить поток ServerSocket
в фоновом режиме, прослушивая указанный порт.Это работает на самом деле, но только один раз.Кажется, что порт, который слушает сервер, никогда не закрывается правильно и все еще активен, когда я пытаюсь перезапустить (O не перезапускайте сам поток).Кто-нибудь может сказать, почему он не работает правильно?Заранее спасибо за любую помощь ...!
edit:
У меня та же проблема на стороне клиента.У меня есть ветка отправителя, а также, что никто не может быть остановлен.Каков наилучший способ сделать это?
ClientConnector
- это просто класс, который подключается к порту сервера и отправляет данные.Это не нить или что-то в этом роде.
Это мой класс отправителя:
private class InternalCamSender extends Thread {
private int sendInterval = 500; // default 500 ms
private ClientConnector clientConn = null;
public InternalCamSender() {
this.sendInterval = getSendingInterval();
this.clientConn = new ClientConnector();
}
@Override
public void run() {
while(!Thread.currentThread().isInterrupted()) {
clientConn.sendCamPdu(CodingScheme.BER, createNewPDU());
try {
Thread.sleep(sendInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
И я пытаюсь справиться с таким поведением:
if(jButton_startSending.getText().equals(STARTSENDING)) {
new Thread() {
public void run() {
iSender = new InternalCamSender();
iSender.start();
jButton_startSending.setText(STOPSENDING);
}
}.start();
} else {
new Thread() {
public void run() {
if(iSender.isAlive()) {
iSender.interrupt();
try {
iSender.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
iSender = null;
jButton_startSending.setText(STARTSENDING);
}
}.start();
}
Каким-то образом яне может остановить InternalCamSender
, как это.Я пробовал с volatile boolean
раньше, было то же самое.Я прочитал страницу http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html и попробовал также пример Что я должен использовать вместо Thread.stop? , но даже это не остановило поток?Я заблудился.
Есть идеи?
edit: нашел ответ на мою проблему с отправкой в клинику здесь http://www.petanews.de/code-snippets/java/java-threads-sauber-beenden-ohne-stop/ даже я не знаю почему этоработает.Я уверен, что пытался сделать это раньше.
Проблема решена!