Java TimerTask希望变量是最终的
无论如何,我正在尝试制作一个聊天程序,有人告诉我使用此代码检查新消息,同时允许用户提交消息:Java TimerTask希望变量是最终的,java,variables,final,timertask,Java,Variables,Final,Timertask,无论如何,我正在尝试制作一个聊天程序,有人告诉我使用此代码检查新消息,同时允许用户提交消息: timer.schedule(new TimerTask() { @Override public void run() { read.readChat(line); } }, 0, 1000); //Wait for user input while(true) { String bar = scan.next(); } 其中read.readChat(行
timer.schedule(new TimerTask() {
@Override
public void run() {
read.readChat(line);
}
}, 0, 1000);
//Wait for user input
while(true) {
String bar = scan.next();
}
其中read.readChat(行)
是显示来自另一个文件的消息的方法。Java告诉我,read
和line
都必须声明为final
。。。我不明白为什么特别是对于“行”
,因为这是一个变量,我需要更改它
另外,在我将它们声明为最终版本后,我会出现以下错误:
unreported exception java.lang.Exception; must be caught or declared to be thrown
read.readChat(salt);
我做错了什么?第二个错误告诉您方法
read.readChat(line)
抛出一个选中的
异常,因此您必须捕获
您不能在匿名内部类中使用在外部类声明的局部变量。将它们设置为final
或声明为字段(实例变量)
编辑:
第二个错误告诉您方法read.readChat(line)
抛出一个选中的
异常,因此您必须捕获
您不能在匿名内部类中使用在外部类声明的局部变量。将它们设置为final
或声明为字段(实例变量)
编辑:
Cody,你想把异常抛出到哪个线程?现在,计时器任务将在另一个线程(计时器)中运行。那么,在您当前的设计中,将要处理它的计时器线程。如果您只是希望运行重新抛出异常,可以将其包装为RuntimeException
@Override
public void run() {
try {
read.readChat(line);
}catch(RuntimeException ex) {
throw ex;
}catch(Exception ex) {
throw new RuntimeException(ex);
}
}
但是,对于计时器,它不会改变任何东西,因为run()方法是计时器线程最不可能看到的。如果需要高级错误处理,则必须在run()中处理它。你能告诉我你想做什么吗?Cody,你想把这个异常抛出到哪个线程?现在,计时器任务将在另一个线程(计时器)中运行。那么,在您当前的设计中,将要处理它的计时器线程。如果您只是希望运行重新抛出异常,可以将其包装为RuntimeException
@Override
public void run() {
try {
read.readChat(line);
}catch(RuntimeException ex) {
throw ex;
}catch(Exception ex) {
throw new RuntimeException(ex);
}
}
但是,对于计时器,它不会改变任何东西,因为run()方法是计时器线程最不可能看到的。如果需要高级错误处理,则必须在run()中处理它。你能再告诉我一点你想做什么吗?好吧,很公平,让我们假设我把它们都定为最终的,我找到了一个解决办法,现在捕获或声明异常如何?@Cody:这条消息说,read.readChat(salt)
行抛出一个声明的异常,你必须处理它。将代码包装在try-catch
块中以处理异常,因为您的方法不允许抛出。@code:如果您确实想将其从该方法中抛出,则需要将其包装在RuntimeException
(未选中)中,并将其从catch
正文中抛出(因此您仍然需要添加try-catch
块)@Codetry{read.readChat(line);}catch(Exception e){throw new RuntimeException(e);}
see好的,很公平,假设我将它们都设置为最终版本,我找到了一个解决方法,现在捕获或声明异常如何?@Cody:这条消息是说lineread.readChat(salt)
抛出一个声明的异常,您必须处理它。将代码包装在try-catch
块中以处理异常,因为您的方法不允许抛出。@code:如果您确实想将其从该方法中抛出,则需要将其包装在RuntimeException
(未选中)中,并将其从catch
正文中抛出(因此您仍然需要添加try-catch
块)@Codetry{read.readChat(line);}catch(Exception e){throw new RuntimeException(e);}
我不知道如何让它抛出异常。我试图在void run()
之后放置throws Exception
,但这只会给我带来更多的问题,无法解决这个问题:(。我不知道如何使它抛出异常。我试图在void run()之后放置throws Exception
)
但这只会给我带来更多的问题,并不能解决这个问题:(。