Поймать ошибку, чтобы завершить работу принтрайтера

Привет, я пытаюсь создать программу, которая позволит пользователю при запуске выбирать, хотят ли они результаты, которые у меня есть, в отдельном файле в виде простого текста, консоли или html в веб-браузере. Единственная ошибка, которая, кажется, появляется в данный момент, заключается в том, что улов должен быть окончательным, но если я изменю его на окончательный, он никогда не закроет мой принтер. Спасибо за любую помощь.

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileWriter;

import java.io.PrintWriter;

import java.lang.reflect.Array;

import java.util.Scanner;

public class HTML {

    public static void main(String[] args) throws FileNotFoundException {

        int scorehome = 0;
        int scoreaway = 0;
        int invalid = 0;
        int goals = 0;
        int valid = 0;

        Scanner scanner = new Scanner(System.in);

        System.out.println("Do you want to generate plain (T)ext or (H)TML");

        String input = scanner.nextLine();

        boolean generateHTML = false;       

        if ( input.equalsIgnoreCase("H") ) {
            generateHTML = true;
        }
        String line;    // stores the each line of text read from the file

        PrintWriter online = new PrintWriter(new FileWriter("C:/temp/htmloutput.html"));

        while ( scanner.hasNext() ) {
            line = scanner.nextLine();  // read the next line of text from the file

            //split the line
            String [] elements = line.split(":");


                //System.out.println("Element " + (i+1) + " was : " + elements[i]);
                if (elements.length == 4) {


                String home = elements[0].trim();
                String away = elements[1].trim();
                String homescore = elements[2].trim();
                String awayscore = elements[3].trim();

                boolean homescoreVal = false;
                boolean awayscoreVal = false;
                boolean homenameVal = false;
                boolean awaynameVal = false;

                    try {   // "try" is a special statement which allows us to deal with "exceptions"
                        scorehome = Integer.parseInt(homescore);    // attempt to convert the String into an Integer type value
                        homescoreVal = true;
                    } catch (NumberFormatException e) {
                        homescoreVal = false;
                    }
                    try {
                        scoreaway = Integer.parseInt(awayscore);    // attempt to convert the String into an Integer type value
                        awayscoreVal = true;
                    } catch (NumberFormatException e) {
                        homescoreVal = false;
                    }

                    if (home.length() <= 1) {
                        homenameVal = false;
                    } else {
                        homenameVal = true;
                    }

                    if (away.length() <= 1) {
                        awaynameVal = false;
                    } else {
                        awaynameVal = true;
                    }

                    if (homescoreVal == true && awayscoreVal == true
                            && homenameVal == true && awaynameVal == true){ 

                        System.out.println(home + " [" + scorehome + "] | "
                                + away + " [" + scoreaway + "]\r");



                    goals = (scorehome + scoreaway) + goals;

                    valid = 1 + valid;
                    } else {
                        invalid = 1 +invalid;
                    }

                }

                else {
                    invalid = 1 + invalid;
                }
            }

        System.out.println("\rValid match was " + valid);
        System.out.println("Total goals scored was " + goals);
        System.out.println("Invalid match count was " + invalid + ".");

        System.out.println("\nEOF");    // Output and End Of File message.

        if (generateHTML == true) {
            online.println("\rValid match was " + valid);
            online.println("Total goals scored was " + goals);
            online.println("Invalid match count was " + invalid + ".");
            }

        String locationOfFile = "C:\temp\\htmloutput.html";

        try { 
            Runtime.getRuntime().exec("cmd.exe /C start " + locationOfFile);

        }   catch {
            System.err.println("Error: unable to open " + locationOfFile);
            }
        }
    }

Сообщение об ошибке: Исключение в потоке "main" java.lang.Error: Нерешенная проблема компиляции: Синтаксическая ошибка, вставьте "Наконец", чтобы завершить TryStatement

at HTML.main(HTML.java:117)

person Davepop    schedule 12.01.2015    source источник
comment
Можете ли вы опубликовать свое сообщение об ошибке?   -  person Kick Buttowski    schedule 13.01.2015
comment
Блока try catch слишком много. Можете ли вы указать строку с ошибкой?   -  person Kick Buttowski    schedule 13.01.2015
comment
@KickButtowski это самый последний улов в конце   -  person Davepop    schedule 13.01.2015
comment
Вы не указали, какое исключение поймает ваш последний catch блок.   -  person rgettman    schedule 13.01.2015
comment
и я не знаю, эмитент это или нет, но вы дважды закрываете свой последний блок попытки   -  person Kick Buttowski    schedule 13.01.2015
comment
@Davepop, ты читал комментарий rgettman и мой комментарий после него?   -  person Kick Buttowski    schedule 13.01.2015
comment
Я отредактировал его, чтобы ошибка попытки исчезла из-за того, что вы сказали, что я закрыл его дважды. Спасибо. Ошибка - это тот самый улов в конце, когда он ожидает finally. Там, чтобы поймать печатника в самом конце   -  person Davepop    schedule 13.01.2015
comment
@Davepop, значит, все в порядке? ты сделал то, что тебе сказал ргетман?   -  person Kick Buttowski    schedule 13.01.2015
comment
@KickButtowski извините, я просто очень запутался, потому что я вставил его, чтобы поймать печатника в самом начале, так что разве я еще не указал исключение?   -  person Davepop    schedule 13.01.2015
comment
Если вы запутались, прочтите что-нибудь о catch блоках. ?   -  person Tom    schedule 13.01.2015
comment
@Davepop, где ты это сделал? можешь показать мне?   -  person Kick Buttowski    schedule 13.01.2015
comment
@KickButtowski Я добавил (NumberFormatException e) к последнему улову, который исправил ошибку, но теперь появилось сообщение об ошибке: Исключение в потоке main java.lang.Error: Нерешенные проблемы компиляции: необработанный тип исключения IOException Тип необработанного исключения IOException в HTML .main(HTML.java:31)   -  person Davepop    schedule 13.01.2015
comment
Необработанное исключение: IOException. Если у вас есть проблема, пожалуйста, сделайте некоторые исследования об этом.   -  person Tom    schedule 13.01.2015
comment
@Davepop хочешь скайп?   -  person Kick Buttowski    schedule 13.01.2015
comment
@KickButtowski извините за поздний ответ, но я хотел бы связаться по скайпу, если предложения еще действуют   -  person Davepop    schedule 13.01.2015
comment
@KickButtowski добавил тебя, чувак, спасибо за помощь   -  person Davepop    schedule 13.01.2015


Ответы (1)


Насколько я прочитал ваш код, логика вашего кода не имеет смысла и не имеет того, что вы ищете.

Вы должны сесть и разбить свою проблему на части

  1. вам нужно выяснить, что произойдет, если ваш пользователь наберет H для выбора HTML или T для обычного текста.

например, используйте этот фрагмент кода в качестве чернового варианта

    System.out.println("Either enter t for plain text\n or h for HTML");
    Scanner input = new Scanner(System.in);
    String  answer = input.nextLine();

    if(answer.equalsIgnoreCase("H")){
        System.out.println("wowwwwww you chose HTML");

        }
    else if( answer.equalsIgnoreCase("T")){
        System.out.println("wowwwwww you chose plain text");
     }
}
  1. После этого вам нужно посмотреть, что вы хотите сделать в каждом случае, в целом вы можете следовать следующим

      1. you gonnna read your file that you have how? using Scanner 
      2. when you have your data inside a array or whatever data structure 
      3. you gonna do your manipulation 
      4.the last job is to write back to wherever you wanna 
    

Некоторые моменты, которые вы должны знать о блоке try catch

  1. у вас может быть блок try с блоком finally и без блока catch
  2. если что-то пойдет не так в вашем блоке try, ваш блок catch сообщит вам о вашей проблеме, например

Например:

 try{
        System.out.print(7/0);
    }catch(Exception e){
        System.out.println(e);
    }finally{
        System.out.println("no matter what I gonna be executed");
    } 

В вашем блоке try вы пытаетесь нырнуть в число семь на ноль, что вызывает исключение

  1. ваш блок finally будет выполнен независимо от того, что вы видите
  2. если ваш блок try работает, обнаружите, что ваш блок catch никогда не выполнялся, но снова ваш блок finally выполняется
  3. если что-то пойдет не так в вашем блоке try, другие операторы не будут выполняться, и вы перейдете к своему блоку catch, если у вас есть
person Kick Buttowski    schedule 13.01.2015