我是線程新手,這是我在主要方法中的代碼,我有一個線程處理一些值,然後我將值設置爲getResult()方法。現在我試圖獲取的價值,但我得到空java線程,線程返回值
RS232Example rs232= new RS232Example();
rs232.main()
System.out.println("value after RS232::"+rs232.getResult())
結果是
value after RS232::null
call
call
call
call
call
call
call
call
call
call
call
0
:: 0
::::?? 0
call
public class RS232Example implements rs232Weight{
private String threadResult;
public void Result(String result) {
threadResult = result;
}
public String getResult() {
return threadResult;
}
public synchronized void connect(String portName) throws Exception {
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
SerialPort serialPort=null;
if (!portIdentifier.isCurrentlyOwned()) {
serialPort = (SerialPort) portIdentifier.open("RS232Example", 2000);
// setup connection parameters
// set the parameter for machine
serialPort.setSerialPortParams(
9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN);
// setup serial port writer
CommPortSender.setWriterStream(serialPort.getOutputStream());
// setup serial port reader
CommPortReceiver obj = new CommPortReceiver(serialPort.getInputStream(),serialPort);
obj.start();
} else {
// points who owns the port and connection timeout
System.out.println("Port in use!");
try{
portIdentifier=null;
}
catch(Exception e){
System.out.println("error"+e);
}
}
}
public void main() throws Exception{
// connects to the port which name (e.g. COM1) is in the first argument
connect("COM1");
// send HELO message through serial port using protocol implementation
CommPortSender.send(new ProtocolImpl().getMessage("HELO"));
}
}
==============
package com.indivar.cmcs.machine;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.InputStream;
public class CommPortReceiver extends Thread{
// public rs232Weight weightRs232;
// RS232Example rs232= new RS232Example();
SerialPort serialPort=null;
String value;
InputStream in;
Protocol protocol = new ProtocolImpl();
rs232Weight weightRs232= new RS232Example();
private volatile boolean stopRequested=false;
public CommPortReceiver(InputStream in,SerialPort serialPort) {
this.in = in;
this.serialPort=serialPort;
}
int i=10;
public void stopRequest() {
stopRequested = true;
serialPort.close();
}
public void run() {
try {
int b;
// System.out.println("f");
while(!stopRequested) {
// if stream is not bound in.read() method returns -1
while((b = in.read()) != -1) {
String val=protocol.onReceive((byte) b);
if (val.equals("0")){
// System.out.println("::::??"+val);
}
else{
value=val;
//.setWeight(value);
System.out.println("::::??"+val);
stopRequest();
weightRs232.Result(val);
break;
}
Thread.sleep(100);
//
}
protocol.onStreamClosed();
// wait 10ms when stream is broken and check again
i--;
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
==================
RS232Example rs232= new RS232Example();
rs232.main()
System.out.println("value after RS232::"+rs232.getResult())
實際上,該對象調用第一個主要方法,然後getResult,但作爲主要方法有一個線程,爲getReult設置VAL值,它需要一段時間之前,該jvm調用getResult方法和打印空值我希望首先完成主方法,然後調用getResult方法。或任何方式,我從我的運行方法返回價值
可以請你告訴**相關代碼** – 2011-03-22 05:45:16