Problemas ao chamar relatório

Pessoal é o seguinte, estou a tentar chamar um relatório numa aplicação web e ele me retorna uma excepção do tipo java.awt.HeadlessException, mais isso só acontece caso tente chamar o objecto JasperViewer, agora se eu alterar o código para gerar o relatorio em pdf ele funciona normalmente. A excepção que ele manda vem do catch da conexão.
Eis o código:

        try {
            Connection conexao = Conexao.getConnection();
            HashMap parametros = new HashMap();
            ServletContext sc = getServletContext();
            JasperPrint jp = JasperFillManager.fillReport(sc.getRealPath("/factura.jasper"), parametros, conexao);
            JasperViewer jv = new JasperViewer(jp);
            jv.setVisible(true);
            Conexao.closeConnection();
        } catch (JRException ex) {
            System.out.println("Erro ao gerar relatorio:"+ ex.getMessage());
        }
        catch(Exception ex){
            System.out.println("Erro na conexão:"+ ex);
        }