我创建了一个程序,用于搜索源文件夹中的文件.如果找到任何文件,它会处理该文件并将其移动到目标文件夹,然后在源文件夹中查找新文件.它必须继续检查文件的源文件夹.
我用一个线程来查找源文件夹中的文件.我面临的问题是,在文件处理期间抛出任何异常时,线程都会停止.即使抛出异常,我也希望线程能够运行.它必须将导致错误的文件移动到其他文件夹并在源文件夹中查找新文件.如何让线程继续运行?
例如:
public void run() {
try {
searchfile();
}
catch(Exception e) {
e.printStackTrace();
}
}
public void searchfile(){
...
}
Run Code Online (Sandbox Code Playgroud)
更新:
在我的问题中我应该更清楚.实际上有4个源文件夹和4个目标文件夹.我必须在每个源和目标对中执行相同的操作.所以我在一个类中创建了4个线程,并在单独的类中执行操作.
class MainClass
{
public static void main(String[] args){
for(int i=0;i<4;i++){
SearchClass search = new SearchClass();
Thread thread = new Thread(search);
thread.start();
}
}
}
class SearchClass
{
public void run() {
try {
searchfile();
} catch(Exception e) {
e.printStackTrace();
}
}
public void searchfile(){ ... } }
Run Code Online (Sandbox Code Playgroud)
所有线程都不会停止运行,尽管它在中间发现任何异常.我怎样才能做到这一点?
好吧....让我试着用最好的方法解释一下......另外:这是针对我的世界中的mod.好的,所以我创建了一个线程对象
public static Thread KillThread = new Thread();
Run Code Online (Sandbox Code Playgroud)
然后在我的主要类的构造函数中,当游戏(Mine craft开始)时我会调用它
KillThread = new Thread(new KillAuraThread());
Run Code Online (Sandbox Code Playgroud)
KillAuraThread是作为线程的类的名称..所以我现在创建了一个线程.是它让我失望的地方线程将运行1秒钟,它不能运行多次,否则将破坏延迟和线程的点.
if(KillAura.enabled && !KillThread.isAlive())
{
System.out.println("Go AURA!");
try
{
KillThread.start();
}catch (Exception e)
{
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这被称为游戏中的每个刻度,它将发送位置更新等.
现在这里是我遇到问题的地方.一旦线程启动它就会变为"活着",当它结束时它就不再"活着".但是线程只能启动一次吗?因为在第一次运行后它不再工作了?和想法?链接?
我有以下主题:
public void start() {
isRunning = true;
if (mainThread == null) {
mainThread = new Thread(this);
mainThread.setPriority(Thread.MAX_PRIORITY);
}
if (!mainThread.isAlive()) {
try {
mainThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在某些时候我想停止它的操作:
public void stop() {
isRunning = false;
System.gc();
}
Run Code Online (Sandbox Code Playgroud)
start()
再次调用时,抛出以下异常:
java.lang.IllegalThreadStateException
Run Code Online (Sandbox Code Playgroud)
指向mainThread.start()
代码行.
启动/停止线程的最佳方法是什么?我怎样才能使这个线程可重用?
谢谢!
我想恢复中断线程的工作,请让我知道一些可能的解决方案.
class RunnableDemo implements Runnable
{
public void run()
{
while(thread.isInterrupted())
{
try{}
catch(Exception e){ //exception caught}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果捕获到异常,则线程被中断,但即使遇到异常,我也希望线程继续工作,所以请建议我一些方法来解决这个问题.
提前致谢