这是我的问题:我有一个对话框,其中包含一些用户可以更改的参数(例如通过微调器).每次更改其中一个参数时,我都会根据新参数值启动一个线程来更新3D视图.如果用户在第一个线程工作时更改了另一个值(或者通过在微调器箭头上单击多次再次返回相同的值),我想中止第一个线程(以及更新3D视图)并启动一个新线程使用最新的参数值.
我怎么能这样做?
PS:run()
我的线程方法中没有循环,因此检查标志不是一个选项:更新3D视图的线程基本上只调用一个执行时间很长的方法.我无法在此方法中添加任何标志,要求中止,因为我无法访问其代码.
我试图阻止一个线程,但我不能这样做:
public class Middleware {
public void read() {
try {
socket = new Socket("192.168.1.8", 2001);
// code ..
Scan scan = new Scan();
thread = new Thread(scan);
thread.start();
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
class Scan extends Thread {
public void run() {
while (true) {
try {
// my code goes here
} catch (IOException ex) {
thread.currentThread().interrupt();
}
}
}
}
public void stop() {
Thread.currentThread().interrupt();
}
// get …
Run Code Online (Sandbox Code Playgroud) 线程处于活动状态时,如何停止线程?我已经给了
if(thread.isAlive()){
thread.stop();
}
Run Code Online (Sandbox Code Playgroud)
但是方法stop已被弃用并抛出异常
01-21 14:12:40.188: ERROR/global(535): Deprecated Thread methods are not supported.
01-21 14:12:40.188: ERROR/global(535): java.lang.UnsupportedOperationException
01-21 14:12:40.188: ERROR/global(535): at java.lang.VMThread.stop(VMThread.java:85)
01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1379)
01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1344)
Run Code Online (Sandbox Code Playgroud)
我们怎么解决这个问题?
在Java应用程序中,当用户点击下载时,建立远程连接并从远程下载内容是在单独的线程中完成的,并且在屏幕中弹出一个对话框以显示下载进度.现在,在对话框中添加了取消命令,以便为用户提供取消下载的选项.当用户点击取消按钮时,可以使用程序中的dispose()方法处理对话框但是如何停止/终止已经启动的线程?线程执行以下任务:1.建立与远程的连接2.从远程下载内容3.在本地存储内容(内容通过流传输)请帮我解决此问题
我正在尝试为特定任务创建一个线程以在另一个类中运行.线程正在启动任务,但是当我尝试停止线程时,它没有停止.线程一直持续到循环.你能帮帮我吗?
线程类:
package com.development;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ThreadExample extends JFrame {
MyThread mt;
Thread th;
ThreadExample(){
JPanel p1 = new JPanel();
p1.setPreferredSize(new Dimension(400,400));
JButton b1 = new JButton("Start");
JButton b2 = new JButton("Stop");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
mt = new MyThread();
th = new Thread(mt);
th.start();
}
});
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
th.interrupt();
}
});
p1.add(b1);
p1.add(b2);
this.getContentPane().add(p1);
this.pack(); …
Run Code Online (Sandbox Code Playgroud)