Hej! Löste det genom att skapa en ny tråd istället för att försöka väcka upp den gamla, fungera bra :)Trådar i java
Jag har ett gui program i java och försöker få till det med trådar i java, och jag har fastnat på hur man stoppar och startar trådar.
------------------------------------------------------------------
package my.myprogram;
import com.jscape.inet.ftp.*;
import com.jscape.inet.ftps.*;
import java.io.*;
import java.util.Enumeration;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.lang.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.Vector;
public class MyProgram extends javax.swing.JFrame {
/** Creates new form MyProgram */
public MyProgram() {
initComponents();
initThread();
}
public class MyProgramClass extends FtpAdapter implements Runnable {
public void run() {
try {
Work();
} catch(Exception e) {
StatusWindow.append("Error: " + e.getMessage() + "\n");
}
}
public void Work() throws FtpException {
while(true){
if (running){
// Do some work
} else {
try {
synchronized(thread) {
thread.wait(0);
}
} catch (InterruptedException e){ }
}
}
}
}
private void initThread() {
runnable = new MyProgramClass();
thread = new Thread(runnable);
running = true;
}
private void StopBtnMouseClicked(java.awt.event.MouseEvent evt) {
running = false;
}
private void StartBtnMouseClicked(java.awt.event.MouseEvent evt) {
if (thread.isAlive()){
running = true;
thread.notify();
} else {
thread.start();
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyProgram().setVisible(true);
}
});
}
private Runnable runnable;
private Thread thread;
private Boolean running;
}
-------------------------------------------------------------
detta funkar bra första gången jag klickar på start, och klickar jag på stop lägger den sig i wait efter det att den kört klart kodloopen. Klickar jag sedan på start igen vill jag att den ska starta igen men jag får bara detta meddelande:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalMonitorStateException: current thread not owner
Har testat en massa olika men får inte till det.
Skulle också varit väldigt bra om det fanns något sätt att kunna avbryta tråden direkt och inte behöva vänta tills loopen kört klart, men ändå kunna starta den igen... finns ju thread.interrupt() men jag vet inte riktigt om man kan starta den sen igen då.
Tacksam om någon kunde hjälpa mig med detta.Sv:Trådar i java