Chase Rowe Ответов: 2

Почему у меня primenumberlist.Ява:31: ошибка: исключение исключение IOException незарегистрированный; должны быть пойманы или как объявляют, были брошены


Каждый раз, когда я запускаю этот код, я получаю
PrimeNumberList.java:31: error: unreported exception IOException; must be caught or declared to be thrown
                export(result);

и я не могу понять почему.
<pre lang="java">


import javax.swing.JOptionPane;
import java.io.*;

public class PrimeNumberList
{
	public static void main(String[] args)
	{
		String start, end, filename;
		String result = "";
		String numlist = "";
		int numstart, numend;
		
		JOptionPane.showMessageDialog(null, "This program will take any 2 numbers " + 
			"you give and return a file with every prime number between those numbers");
		
		start = JOptionPane.showInputDialog("Enter a starting number");
		numstart = Integer.parseInt(start);
		
		end = JOptionPane.showInputDialog("Enter a ending number");
		numend = Integer.parseInt(end);
		
		
		
		for (int i = numstart; i <= numend; i++)
		{
			if (isPrime(i))
			numlist = numlist + i + " ";
		}
		result = " a list of primes from " + numstart +
			" to " + numend + " is: " + numlist;
		export(result);
		
		System.exit(0);
	}
	
	
	
	public static boolean isPrime(int num)
	{
		boolean divisorFound = false;
		int count = 2;
		
		while(count < num && !divisorFound)
		{
			if((num % count) == 0)
				divisorFound = true;
			count ++;
		}
		
		return !divisorFound;
	}
	
	public static void export(String result) throws IOException
   {
      // Open the file.
      PrintWriter outputFile = new PrintWriter("PrimeNumberList.txt");


         // Write the name to the file.
      outputFile.println(result);
	  
	  outputFile.close();
    }
}


Что я уже пробовал:

Я изменил переменную экспорта изменил имя строки методов экспорта и попытался установить имя строки равным новой переменной перед записью ее в файл

ZurdoDev

Какая строка кода выдает ошибку?

Chase Rowe

строка 31

ZurdoDev

И что это может быть за линия?

Chase Rowe

экспорт(результат);

2 Ответов

Рейтинг:
9

ZurdoDev

Из быстрого поиска в google это означает, что вы должны поймать исключение. Видеть Сообщение об ошибке "исключение незарегистрированный Ява.Ио.Класс IOException; должны быть пойманы или как объявляют, были брошены" - переполнение стека [^].

Ваш метод экспорта говорит, что он вызовет исключение ввода-вывода, но когда вы вызываете export, он не находится внутри try catch, который поймает это исключение.


Рейтинг:
20

Afzaal Ahmad Zeeshan

В Java вы можете перехватывать проверенные исключения (например, то, с которым вы сталкиваетесь прямо сейчас) в try...catch блок, как предложено в решении 1:

// try...catch only needs to be around the error-prone code.
try {
   export(result); 
} catch (Exception error) {
   // error handling logic
}
Или можно добавить throws модификатор к функции и пусть она пузырится. Подобный этому:
public static void main(String[] args) throws IOException { // <-- add this
   // main code here
}
Проверьте эти темы, чтобы узнать больше об этом:
java - выбрасывание исключения в основном методе - переполнение стека[^]

Конечно, вы всегда можете использовать try...catch чтобы обрабатывать его автоматически/вручную в вашем коде. Причина, по которой нам нужно использовать любой из них, заключается в том, что в Java игнорирование проверенных исключений рассматривается как ошибки во время компиляции—что хорошо по нескольким причинам, особенно для начинающих, которые не знают о безопасности Java, Java IO и других практиках или gotchas Есть несколько способов обойти это, чтобы "отключить" проверенные исключения, но Я очень не одобряю эту практику; но если вы хотите увидеть, проверьте Возможно ли отключить проверенные исключения в Java? - переполнение стека[^]