J2ME MIDlet Suite 및 HttpConnection이 다른 스레드에 있어야하는 이유
-
11-12-2019 - |
문제
J2ME MIDlet에서 서블릿을 호출하고 싶습니다. 그래서 Servlet URL에 대한 HttpConnection 코드가 GET 메소드를 호출합니다.
MIDlet Suites가 서블릿 URL에 연결하려고하면 아래의 메시지가 있습니다.
{#MyMidlet} Midlet Suite wants to connect to {#Servlet URL} using air time,
this may result in charges, Is it ok to use airtime ?
.
NO 또는 YES를 클릭하면 아무 일도 일어나지 않으며 방금 교수형을 받았습니다. 나는 ECLIPSEME과 SUN WTK 2.5.2를 사용하고 있습니다.콘솔에서 경고가있었습니다.
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
.
은 별도의 스레드에서 httpConnection을 만드는 경우 문제가 해결됩니까?
해결책
별도의 스레드에서 httpConnection을 수행하면 문제가 해결됩니까?
당신이 그것을 올바르게한다면, 예, 문제가 해결 될 것입니다. 이것은 전형적인 문제이며 대제 솔루션이 있습니다.
경고 MIDlet의 디자인 문제를 나타냅니다. ui와 동일한 스레드에서 실행되는 "헤비급"활동 (HTTP 연결)이 있으므로 차단하고이를 무책임하게 만듭니다.
UI 이벤트 스레드에서 무거운로드를 피하십시오.
commandAction
또는keyPressed
또는pointerPressed
등 안의 무언가를 많이 수행 할 때 새로운 스레드를 생성하기 위해 새로운 스레드를 생성합니다. 이유를 더 잘 이해하기 위해이 자습서를 공부하는 방법을 고려해보십시오.이 기사에서는 사용자 인터페이스를 손상시키지 않고 MIDlet이 네트워크 연결을 수행 할 수있는 방법을 설명합니다. 멀티 스레드 네트워킹 및 대기 화면의 사용을 보여주는 6 개의 반복 예제가 포함되어 있습니다 ...
- 튜토리얼 (
PrimitiveMidlet
)에서 첫 번째 예제가 끝난 후에도문제에 대한 자세한 설명조차도 있습니다.
... 프로그래머는 자신의 오랜 가공을 위해 시스템 스레드를 납치했습니다. 사용자가 명령을 선택할 때 시스템이 자신의 CommandAction () 메소드를 호출합니다. 이 메서드를 호출하는 스레드는 개발자가 아닌 시스템에 속합니다. 이 방법이 신속하게 실행되는 경우 범죄는 아닙니다. 그러나이 경우 네트워크 연결은 시스템의 스레드를 오랫동안 숨길 수 있습니다.
J2SE 응용 프로그램 프로그래밍 및 서블릿 프로그래밍에서도 시스템은 스레드를 만들고 처리가 얼마나 오래 걸릴 수 있는지에 대한 제한이 거의 없습니다. MIDlet 스레딩의 규칙은 간단하고 엄격합니다 : 당신에게 속한 유일한 스레드는 자신이 만드는 것들입니다.
MIDlet에서는 시스템이 자체 스레드 중 하나에서 호출하는 코드를 작성합니다. MIDlet의 StartApp (), PauseApp (), DestroyApp () 및 이벤트 핸들러 메서드가 호출되면 시스템 스레드 내부에서 실행됩니다. 시스템 스레드가 다른 작업을 계속할 수 있도록 메소드가 빠르게 반환되어야합니다. 완료 될 수없는 모든 작업을 시스템의 스레드에서 빠르게 이동해야합니다.
이 스타일의 프로그래밍은 시스템 스레드에서 호출되는 코드 만 작성하는 것처럼 익숙해지는 데 익숙해 질 수 있습니다. 그러나 다른 GUI 프로그래밍을 수행 한 경우이 기술은 익숙합니다. AWT 및 Swing에는 운영 체제 이벤트를 처리하고 코드에서 이벤트 처리기를 호출하는 이벤트 디스패치 스레드가 있습니다. 규칙은 동일합니다. 이벤트 핸들러는 나머지 인터페이스가 잠길 수 없도록 이벤트 핸들러가 이벤트 디스패치 스레드로 신속하게 실행되어야합니다 ... 자습서에서의 추가 코드 예제 위의 디자인 실수를 수정하는 방법과 Midlet 사용자 인터페이스를 원활하게 네트워킹 활동에 부드럽게 상호 운용하는 방법을 보여줍니다.
다른 팁
이와 같이 별도의 스레드로 연결을 만듭니다.
Thread myConnection = new Thread(new Runnable() {
public void run() {
// TODO open connection here
HttpConnection conn = null;
try {
conn = (HttpConnection) Connector.open(serverURL,
Connector.READ_WRITE, true);
conn.setRequestMethod(HttpConnection.GET); // or POST method
} catch (Exception e) {
// TODO: handle exception
} finally {
// close connection here
}
}
});
myConnection.start();
.
J2ME에서 네트워크 작업은 별도의 스레드에 저장됩니다.
U 네트워킹 모듈을 별도의 스레드에 넣습니다. U 네트워킹 모듈을 별도의 스레드에 넣으면 다음 메시지가 나타나지 않았습니다.
Warning: To avoid potential deadlock, operations that may block, such as
networking, should be performed in a different thread than the
commandAction() handler.
.
J2ME (J2ME 소유자 인 Sun / Oracle)는 몇 가지 제한 사항을 제공합니다. 보안 일부 API가 신뢰할 수있는 당사자가 필요합니다.이 모바일은 사용자를 클릭하면 사용자에게 권한을 요청합니다. 그렇습니다.그렇지 않으면 허용되지 않습니다.
다음은 해당 시나리오에서 일부 API가 제공됩니다 (파일 읽기 / 쓰기) API, httpConnection, HttpSconnection 등.
UR 장치가 지원되는지 여부를 확인하십시오. 자체 서명 인증서를 지원합니다. 지원은 자체 서명 인증서를 사용하는 것을 의미합니다.
신뢰할 수있는 파티 인증서는 값 비싼 것입니다. 최소한의 비용은 연간 ruppees 10000입니다. 다음은 몇 가지 신뢰할 수있는 파티 벤커입니다. verizon, semantec 등