我在正确使用try和catch语句时遇到问题。
以前我在main方法中使用了所有这些代码并且它有效,但是当我想把它放入分离的线程问题时出现了。
以前我用的是'抛出IOException
,但在实现Runnable
的类中,我不能使用throws IOException
,因为有错误。
我想得到一些建议,如何使这个代码再次运行,但是在线程中。
我很感激与使我的代码更好的所有建议。
public void run() {
File file= new File("Towar.txt");
Scanner sc;
BufferedReader br;
try {
sc = new Scanner(file);
br= new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line;
int count=0;
while (sc.hasNextLine()) {
line = br.readLine();
if (line==null)break;
int space = line.indexOf(" ");
int id_towaru = Integer.parseInt(line.substring(0, space));
double waga = Double.parseDouble(line.substring(space));
Towar tow= new Towar(id_towaru,waga);
count++;
if (count%200==0)System.out.println("Created: "+ count + " objects");
}
}
}
答案 0 :(得分:2)
Scanner sc = null;
try {
sc = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
// exit program here?
}
答案 1 :(得分:0)
你遇到的问题是由于runnable是异步调用的,所以没有“等待”它,它也没有返回值。
取决于您的应用程序的其余部分,以及如何调用它,并行调用多少内容等,您有两个主要选项:
1。)如果启动运行此runnable的线程的东西并不真正关心结果,那么你可以在run()方法中执行try catch。然后由catch区块采取适当的行动:
public void run() {
try {
// do some stuff
} catch (Exception e) {
// write some kind of error log
}
}
2.)另一种做同样事情的方法是使用“Callable”而不是“Runnable”。一个Callable可以像Runnable一样调度,但它可以抛出异常,并且它可以有一个返回值。
public MyCallable implements Callable<String> {
public String call() throws Exception {
// do stuff
}
}
现在,如果你使用这种方法,你需要某种Excutor,并提交callable来执行。这将返回
Future<String>
你可以调用各种get()方法来抛出异常(如果你的代码抛出异常或者你得到超时),或者ot将返回实际的返回值。
一个简单的例子:
答案 2 :(得分:0)
这是您的新方法应该是什么样子。以下代码将在正确的位置捕获异常,并且还将关闭所有流以防止资源泄漏。
public void run() {
try {
File file = new File("Towar.txt");
Scanner sc = new Scanner(file);
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int count = 0;
while (sc.hasNextLine()) {
line = br.readLine();
if (line == null)
break;
int space = line.indexOf(" ");
int id_towaru = Integer.parseInt(line.substring(0, space));
double waga = Double.parseDouble(line.substring(space));
Towar tow= new Towar(id_towaru,waga);
count++;
if (count % 200 == 0)
System.out.println("Created: " + count + " objects");
}
sc.close();
br.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
答案 3 :(得分:0)
你想使用try catch place那里的东西会像这一行一样失败:
try{
int id_towaru = Integer.parseInt(line.substring(0, space));
}
catch(Exception e){
//something you want this part to do, eks:
System.out.println("did not find Integer");
}