したがって、私は停止したいループのないスレッドを持っています。私はインターネットを検索し、ループスレッドを作成せずに解決策を見つけられませんでした。 スレッドは、Webサーバーに情報を要求し、その結果をJListに表示します。永遠にループしません。この機能をスレッドにした理由は、Webサーバーから送信される情報の量に応じて約1〜5分かかり、リクエストでブロックされずにアプリケーションで作業を続けたいからです。スレッドは次のようになります。Javaのループの非ループThread
public class Search extends Thread implements Runnable{
@Override
public void run(){
requestToWebServer(); //10-20sec
receiveInformation(); //10-20sec
handleResponse(); //1-4min
addDataToJList(); //5sec
}
}
私の問題は、このスレッドが完全に実行されないようにする方法がないことです。私は、廃止予定のメソッドThread.stopを使用したくありません。
編集:runメソッド内 完全なコード:
public void run(){
try{
log.info(Languages.getString("SearchFrame.2") + this.query); //$NON-NLS-1$
String resp = ConnectionUtils.request("http://hdfilme.tv/movie/search?key=" //$NON-NLS-1$
+ this.query.replaceAll(" ", "+")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Matcher movie_img_matcher = MOVIE_IMG_PATTERN.matcher(resp);
Matcher movie_stream_matcher = MOVIE_STREAM_PATTERN.matcher(resp);
log.info(Languages.getString("SearchFrame.4")); //$NON-NLS-1$
while (movie_img_matcher.find()) {
img_src.add(new URL(movie_img_matcher.group(1)));
names.add(movie_img_matcher.group(2));
}
log.info(Languages.getString("SearchFrame.5") + img_src.size() + Languages.getString("SearchFrame.6")); //$NON-NLS-1$ //$NON-NLS-2$
log.info(Languages.getString("SearchFrame.7")); //$NON-NLS-1$
while (movie_stream_matcher.find() && mov_src.size() < img_src.size()) {
mov_src.add(new URL(movie_stream_matcher.group(1) + "stream")); //$NON-NLS-1$
}
log.info(Languages.getString("SearchFrame.5") + mov_src.size() + Languages.getString("SearchFrame.8")); //$NON-NLS-1$ //$NON-NLS-2$
log.info(Languages.getString("SearchFrame.9")); //$NON-NLS-1$
for (int i = 0; i < mov_src.size(); i++) {
log.debug(Languages.getString("SearchFrame.10")); //$NON-NLS-1$
String response = ConnectionUtils.request(mov_src.get(i).toString());
ConnectionUtils.getLastPage();
Matcher movie_link_matcher = MOVIE_LINK_PATTERN.matcher(response);
log.debug(Languages.getString("SearchFrame.11")); //$NON-NLS-1$
if (movie_link_matcher.find()) {
res.add(movie_link_matcher.group(2));
con = getCon(new URL(movie_link_matcher.group(1).replaceAll("\\\\/", "/")), "HEAD");
log.debug(Languages.getString("SearchFrame.12")); //$NON-NLS-1$
last_modified.add(con.getHeaderField("Last-Modified")); //$NON-NLS-1$
sizes.add(i, con.getContentLengthLong());
}
if(Options.getString("DefaultDownload").equals("0")){
dirs.add(i, System.getProperty("user.home") + "\\Videos"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
dirs.add(i, Options.getString("DefaultDownload"));
}
}
log.debug(Languages.getString("SearchFrame.13")); //$NON-NLS-1$
for(int i = 0; i < mov_src.size(); i++){
try{
model.addElement(new Movie(mov_src.get(i), img_src.get(i), names.get(i), res.get(i), dirs.get(i), last_modified.get(i), sizes.get(i)));
} catch(IndexOutOfBoundsException ex){
log.info(ex);
}
}
} catch(Exception ex){
log.error(ex);
}
}
メソッド呼び出しの間で割り込みステータスをチェックしないのはなぜですか? –
たとえば、if(Thread.currentThread()。isInterrupted()){return; } ' –
これはコード全体のものではなく、コードの内容の概要です。コードそのものは約60行であり、http reqestの間にステータスを確認することはできません。 –