Como acessar o disco D: do windows dentro de uma classe privada

Eu criei uma Jframe para preencher o seguintes campos:
Codigo de barras:
Quantidade:
Que no caso funcionaria da seguinte forma, o cliente iria ler o codigo de barra e informar a quantidade (Fazendo assim um loop infinito, que so seria encerrado caso Codigo de barras == 0 e sempre armazenando todos os dados informados) .
O valor informado nesses respectivos campos (gerariam um arquivo texto que seria gravado no disco local (D:)), mas como a JFrame é uma classe privada não esta permitindo salvar este arquivo no disco (D:). Eu comentei a parte que o sistema esta barrando para melhor vizualização.

package view;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.BorderLayout;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ViewPrimeiraTela {

	private JFrame frame;
	private JTextField textCodigodeBarras;
	private JTextField textQuantidade;

	public static void main(String[] args) throws IOException {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ViewPrimeiraTela window = new ViewPrimeiraTela();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		
	}

	public ViewPrimeiraTela(){
		initialize();
		
	}
	
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
	    
		JLabel lblCdigoDeBarras = new JLabel("C\u00F3digo de barras :");
		lblCdigoDeBarras.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblCdigoDeBarras.setBounds(10, 11, 200, 50);
		frame.getContentPane().add(lblCdigoDeBarras);
		
		textCodigodeBarras = new JTextField();
		textCodigodeBarras.setBounds(10, 51, 200, 25);
		frame.getContentPane().add(textCodigodeBarras);
		textCodigodeBarras.setColumns(10);
		String valorQuantidade = textCodigodeBarras.getText();
		
		JLabel lblQuantidade = new JLabel("Quantidade:");
		lblQuantidade.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblQuantidade.setBounds(10, 63, 200, 50);
		frame.getContentPane().add(lblQuantidade);
		
		textQuantidade = new JTextField();
		textQuantidade.setBounds(10, 101, 200, 23);
		frame.getContentPane().add(textQuantidade);
		textQuantidade.setColumns(10);
		String valorCodigodebarras = textQuantidade.getText();
		
		
	// Esta execução que esta sendo barrada pelo sistema	
//	FileWriter arq = new FileWriter("d:\\Codigo.txt");
 //       PrintWriter gravarArq = new PrintWriter(arq);
   
      
// 	long i =1, sair;
// 	 while (i != 0) {
//  	    	i = Long.parseLong(valorCodigodebarras);  
//  	    	if (i == 0){
//  	    		arq.close();	
//  	    	} else {     	         
//  	      gravarArq.println("\n"+valorCodigodebarras+";"+valorQuantidade+ "\n" );
// 	    	}
//  	    }
//	   arq.close();
//            JOptionPane.showMessageDialog(null,"\nO arquivo texto Código de barras foi gravado com sucesso em \"d:\\Codigo.txt\".\n");
   
  	
 	
						
		JButton btnProximo = new JButton("Proximo");
		btnProximo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
			
		});
		btnProximo.setBounds(163, 228, 89, 23);
		frame.getContentPane().add(btnProximo);
		

	}


	
}

Que baboseira é essa? Classe privada ou não não irá interferir nisso.
Qual o erro?

2 curtidas

Desculpa pela baboseira kkk ainda estou no segundo periodo da faculdade, estou apanhando um pouco pois estou aprendendo isto por fora. A mensagem que aparece é “Unhandled exception type IOException”, mas quando eu realizo esta declaração:
private void initialize() throws IOException {
O erro
“Unhandled exception type IOException” é corrigido, mas me gera um novo erro em outra linha “Multiple markers at this line
- Unhandled exception type IOException
- Line breakpoint:ViewPrimeiraTela [line: 41] -
ViewPrimeiraTela()”

Nesta parte do código:
public ViewPrimeiraTela() throws IOException{
// Esta linha que fica com o erro initialize();

}

Vamos por partes.
Unhandled exception indica que um trecho de código que contém uma exceção verificada não está sendo tratada adequadamente (o trecho não está em um bloco try/finally ou try/catch e nem num método com um throws compatível).
Neste caso, a exceção que pode ocorrer é a IOException, ou seja, você está tentando manipular elementos do sistema, como ler ou escrever num arquivo (que pode não existir, não está naquele diretório ou você não tem as devidas permissões para interagir com o mesmo).
Quando você altera o código e insere

O erro, obviamente, desaparece.
Tentou adicionar o throws IOExceptio no método initialize?

Ficaria assim: public ViewPrimeiraTela() {
initialize() throws IOException;
}
Se for isto acabei de tentar e não permitiu. Se a explicação estiver muito confusa pode me falar que eu tento explicar melhor. Deu a seguinte mensagem:
Multiple markers at this line
- The left-hand side of an assignment must be a variable
- Line breakpoint:ViewPrimeiraTela [line: 43] -
ViewPrimeiraTela()
- Syntax error on token “throws”, invalid
AssignmentOperator

Não, cara, não ficaria assim.
Mas por que raios você mudou o que já tinha feito?

Abaixo deste tem o método initialize, faça do mesmo modo neste método.

O meu amigo, eu não mudei o que eu ja tinha feito.
image , está desta forma mas não deu certo.

Desisto.

Ok obrigado de qualquer forma. E não se esqueça, todos começam de baixo. Não tenho vergonha de fazer perguntas bobas, eu tenho vergonha é de ficar com duvidas. Mas mesmo assim muito obrigado pela sua ajuda, aprendi muitas coisas.

Cara, tu pode começar por qualquer lugar. Porém, dê-se ao mínimo de trabalho de ler e estudar. Não tente adivinhar como as coisas são feitas.

Pergunta: por que diabos você fez um método correto e fez merda no outro? Propositalmente?

E por que não fez a mesma coisa no outro método?

Cara na faculdade eu estou aprendendo Scanner básico.
System.out.print("Digite n1: ")
x = input.nextInt();
Estou dando meu melhor LENDO e ESTUDANDO POR FORA. Mas obrigado.
E eu não fiz “merda” propositalmente, apenas não tenho conhecimento suficiente sobre esse método. Obrigado.

Olá Vinicius,

Atente-se a essa informação, dita pelo Darlan:

Unhandled exception indica que um trecho de código que contém uma exceção verificada não está sendo tratada adequadamente (o trecho não está em um bloco try/finally ou try/catch e nem num método com um throws compatível).
Neste caso, a exceção que pode ocorrer é a IOException, ou seja, você está tentando manipular elementos do sistema, como ler ou escrever num arquivo (que pode não existir, não está naquele diretório ou você não tem as devidas permissões para interagir com o mesmo).

Então, basta você circundar seu código passível de exceção em um bloco try/catch. Por exemplo:

try{
    FileWriter arq = new FileWriter("d:\\Codigo.txt");
    PrintWriter gravarArq = new PrintWriter(arq);
    
        
    long i =1, sair;
    while (i != 0) {
        i = Long.parseLong(valorCodigodebarras);  
        if (i == 0){
            arq.close();	
        } else {     	         
            gravarArq.println("\n"+valorCodigodebarras+";"+valorQuantidade+ "\n" );
        }
    }
    arq.close();
    JOptionPane.showMessageDialog(null,"\nO arquivo texto Código de barras foi gravado com sucesso em \"d:\\Codigo.txt\".\n");
} catch(IOException e){
    e.printStackTrace();
} 

Mais informações sobre esse assunto, você pode encontrar em: Lesson: Exceptions

1 curtida

Ou você põe seu código entre um bloco try catch ou você põe um throws na declaração do método.

Se você utilizar a classe Scanner para ler entrada do teclado utilize somente o método nextLine() pois é o único método que trata adequadamente a quebra de linha ao pressionar ENTER.
Os outros métodos nextQualqueCoisa() não consomem a quebra de linha, utilize estes métodos somente para ler InputStream diferentes do System.in.

1 curtida