02003163
asked on
Java GUI and MultiThreading
Hello,
I feel really stupid at the mo but I havent done any Java in about 3 years and that was only in UNI.
So my problem is that at the moment I have an application with a FrameView GUI that I have created in NetBeans IDE 6.
On startup the program reads a text file in and based on the amount of seperate sensors are in the list it creates a new UDP Thread for each sensor. Inside each thread a UDP Client is created that access the port.
So the part I am stuck on is gettign it back to the screen or even into the main class. I dont want to create a new instance of the GUI in order to do this and am not sure where to go from here.
So I call a StartUDPReceive at start up.
In this method is this code :
public void startUDPReceiver() throws FileNotFoundException, IOException {
String line = null;
BufferedReader config = new BufferedReader(new FileReader("C:\\portSettin gs.ini"));
int i = 0;
while (( line = config.readLine()) != null){
String threadName =line.substring(0,line.ind exOf(",")) ;
int threadPort = Integer.parseInt(line.subs tring(line .indexOf(" ,")+1,(lin e.length() )));
new UDPThread(threadPort,threa dName).sta rt();
i++;
}
System.out.println("Port Listeners" + i);
}
So for each line in my file it gets the Port Number and Name and makes a UDP Thread for each one.
Here I have a piece of code called decomposeXML which simply splits it into words and then I send the data out to seperate Interp scripts depending on the name of the message. These Interp Scripts are what I am having trouble with at the moment. I cannot get them to send the data back to the GUI Class as It is a not instantiated.
public class UDPThread extends Thread {
private int Port;
public UDPThread(int Port, String name) {
super(name);
this.Port = Port;
}
public void run() {
UDPClient threadedClient = new UDPClient(Port);
try {
while (true) {
decomposeXML(threadedClien t.runClien t());
}
}
catch (Exception e) {
System.out.println("Except ion : " + e);
}
}
}
public class UDPClient {
private int portID;
public UDPClient(int newPortID) {
this.portID = newPortID;
}
public int getPortID()
{
return this.portID;
}
public String runClient() throws Exception {
DatagramSocket socket = new DatagramSocket(this.getPor tID());
byte[] buf = new byte[256];
DatagramPacket pack = new DatagramPacket(buf,buf.len gth,InetAd dress.getB yName("139 .166.238.2 55"),this. getPortID( ));
socket.receive(pack);
socket.close();
return (new String(pack.getData(),0,pa ck.getLeng th()));
}
}
Any Ideas appreciated.
Im sure I had this working in the office before but Im now at sea on a research cruise for a month and am stuck for getting into my computer from here.
Cheers
I feel really stupid at the mo but I havent done any Java in about 3 years and that was only in UNI.
So my problem is that at the moment I have an application with a FrameView GUI that I have created in NetBeans IDE 6.
On startup the program reads a text file in and based on the amount of seperate sensors are in the list it creates a new UDP Thread for each sensor. Inside each thread a UDP Client is created that access the port.
So the part I am stuck on is gettign it back to the screen or even into the main class. I dont want to create a new instance of the GUI in order to do this and am not sure where to go from here.
So I call a StartUDPReceive at start up.
In this method is this code :
public void startUDPReceiver() throws FileNotFoundException, IOException {
String line = null;
BufferedReader config = new BufferedReader(new FileReader("C:\\portSettin
int i = 0;
while (( line = config.readLine()) != null){
String threadName =line.substring(0,line.ind
int threadPort = Integer.parseInt(line.subs
new UDPThread(threadPort,threa
i++;
}
System.out.println("Port Listeners" + i);
}
So for each line in my file it gets the Port Number and Name and makes a UDP Thread for each one.
Here I have a piece of code called decomposeXML which simply splits it into words and then I send the data out to seperate Interp scripts depending on the name of the message. These Interp Scripts are what I am having trouble with at the moment. I cannot get them to send the data back to the GUI Class as It is a not instantiated.
public class UDPThread extends Thread {
private int Port;
public UDPThread(int Port, String name) {
super(name);
this.Port = Port;
}
public void run() {
UDPClient threadedClient = new UDPClient(Port);
try {
while (true) {
decomposeXML(threadedClien
}
}
catch (Exception e) {
System.out.println("Except
}
}
}
public class UDPClient {
private int portID;
public UDPClient(int newPortID) {
this.portID = newPortID;
}
public int getPortID()
{
return this.portID;
}
public String runClient() throws Exception {
DatagramSocket socket = new DatagramSocket(this.getPor
byte[] buf = new byte[256];
DatagramPacket pack = new DatagramPacket(buf,buf.len
socket.receive(pack);
socket.close();
return (new String(pack.getData(),0,pa
}
}
Any Ideas appreciated.
Im sure I had this working in the office before but Im now at sea on a research cruise for a month and am stuck for getting into my computer from here.
Cheers
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Can you post the code for decompose XML?
ASKER
Thanks for the help with that one. Worked straight away. I am only just looking at java again as a prototype for something at work so its good to be able to ask questions here. Thanks again for the help.