blackberry中的线程同步问题
在我的应用程序中,我需要与web服务器建立Http连接,Http连接是在用户选择ListField元素时建立的。它工作正常,我编写了一个方法来建立http连接,它返回一个结果,我的程序处理这些数据 但是它挂起了UI,因为我编写的方法不是在一个单独的线程中,我编写的用于建立http连接的方法是在一个单例类中。现在我在一个单独的线程中更改了我的方法,现在我得到了非法的线程状态异常 所以我改变了我的类HttpConnection类,现在它不是singleton,现在没有非法状态异常,但是我没有得到我想要的结果 我在java和blackberry方面的经验较少,我不知道如何同步两个线程。所以我引入了一个静态变量“I”,当程序进入线程时,它变为0,当它得到http响应时,它变为1 所以在我的程序中使用while循环并检查i值。当它变为1时,我收到http响应,它也是一个静态字符串变量。但现在我的程序也无限期地挂起,我知道这不是一个好方法 请通过分享您关于线程同步、链接代码等的想法来帮助解决这个问题 这是我的跑步方法:blackberry中的线程同步问题,blackberry,java-me,Blackberry,Java Me,在我的应用程序中,我需要与web服务器建立Http连接,Http连接是在用户选择ListField元素时建立的。它工作正常,我编写了一个方法来建立http连接,它返回一个结果,我的程序处理这些数据 但是它挂起了UI,因为我编写的方法不是在一个单独的线程中,我编写的用于建立http连接的方法是在一个单例类中。现在我在一个单独的线程中更改了我的方法,现在我得到了非法的线程状态异常 所以我改变了我的类HttpConnection类,现在它不是singleton,现在没有非法状态异常,但是我没有得到我想
public void run() {
i =0;
observerStatusUpdate(i, "Please Wait");
StreamConnection streamConnection=null;
InputStream inputStream=null;
HttpConnection httpConnection = null;
String result="";
try {
streamConnection=(StreamConnection)Connector.open(url);
httpConnection=(HttpConnection)streamConnection;
httpConnection.setRequestMethod(HttpConnection.GET);
//httpConnection.setRequestProperty("Content-Type", "//json");
int httpStatus=httpConnection.getResponseCode();
if(httpStatus==HttpConnection.HTTP_OK){
inputStream = streamConnection.openInputStream();
//byte[] radioTimeData=new byte[8000];
byte radioTimedataByte;
while((radioTimedataByte=(byte)inputStream.read())!=-1){
result=result+(char)radioTimedataByte;
}
httpres = result;
setResult(result);
i=1;
observerStatusUpdate(i, "");
}
} catch (IOException e) {
i=1;
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("No Internet Connectivity");
//System.exit(0);
}
});
System.out.println(e);
}
它被称为使用另一个类,比如
grabAPIFactory.setUrl(newUrl,o1);
grabAPIFactory.start();
grabAPIFactory.setPriority(Thread.MAX_PRIORITY);
while(GrabapiFactory.i==0){
Thread.sleep();
}
string httpresult = GrabapiFactory.httpres;// static variale getting result from server
// process the httpresult here.....
根据你的描述,听起来你应该重新考虑你的应用程序架构。我相信那些sigleton/waiting循环是做你需要的事情的骇客/丑陋的方式 基本上,您需要知道的是:在非UI线程上,您需要在UI线程上创建smth,然后BB上的一个常见模式是使用以下方法之一: 因此,当用户事件发生时,单击您启动一个新线程,该线程执行联网或其他一些可能长期运行的操作,当您需要更新UI(例如,推/弹出屏幕)时,更改字段上的外观,然后使用Application.invokeLaterRunnable
另外,请检查和。段落,以及一些说明您的问题的代码可能会有所帮助。如果没有看到代码的相关部分,我们只能猜测问题所在。由于我的代码很长,因此我没有添加它,谢谢