2013-09-26 2 views
1

그래서 JFileChooser를 구현하는 데 문제가 있습니다. 임씨는 CSV 파일을 가져와야하는 매우 간단한 프로그램을 만들고 있습니다. 확장 기능이 CSV인지 확인하기 위해 매우 간단한 파일 선택기를 구현하기를 희망했습니다.FileChooser를 Java로 올바르게 구현하는 방법

다음은 사용자가 파일을 선택하는 내 실행 클래스의 코드입니다.

import java.io.File; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 


public class Run 
{ 
    JFrame frame = new JFrame(); 
    JFileChooser fileChooser = new JFileChooser(); 
    fileChooser.showOpenDialog(frame); 
    File selFile = fileChooser.getSelectedFile(); 
    Reader reader = new Reader(selFile); 
} 

그리고 컴파일하기 전에 이클립스에 오류가 있습니다.

Syntax error on tokens, misplaced construct. 

오류가 fileChooser 및 showOpenDialog 사이의 기간에 발생한다.

두 번째 오류는 다음과 같은 프레임에 있습니다.

Syntax error on token "frame", VariableDecleratorID expected after this token. 

현재로서는 내가 잘못하고있는 것이 확실하지 않습니다.

도움 주셔서 감사합니다.

+0

여기를보세요 : http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html – porfiriopartida

답변

2

fileChooser.showOpenDialog(frame); 

비 선언적 문 때문에 이러한 방법으로 코드 블록에 있어야한다. 응용 프로그램에는 main 메소드가 없으므로 명령문의 주변 코드 블록으로뿐만 아니라 응용 프로그램의 진입 점으로도 간단하게 사용할 수 있습니다. 클래스 내에서 코드의

public class Run { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       JFileChooser fileChooser = new JFileChooser(); 
       fileChooser.showOpenDialog(frame); 
       File selFile = fileChooser.getSelectedFile(); 
       // use selFile... 
      } 
     }); 
    } 
} 
+0

그래서 나는 모든 내 생성자에서 그것을 가지고 캔트? 또는 오히려, 나는 내 생성자에서 그것을 가질 수 없다는 것을 알지 못했습니다. –

+1

일반적으로 클래스를 인스턴스화 할 때 대화 상자가 나타나지 않기를 원합니다. :) – Reimeus

+0

알기, 잘 알고 있습니다. 나는 지금 어리 석다. –

3

귀하의 모든 라인은의 멤버가 될 수 없습니다 같은 인스턴스 변수의 선언과

fileChooser.showOpenDialog(frame); 

이 객체의 메소드의 호출을 제외하고 자신의 초기화이다 수업.

반원 간체 특성 및 방법이다 (확장 버전 : 또한 정적 변수, 정적 인 방법, 내부 클래스, 정적 블록을 포함 할 수있다 ....) 배후의 추론은 간단

이다에서 OO 환경은 메소드 호출을 트리거하지 않고 아무 일도 일어나지 않으면 아무 일도 일어나지 않습니다.

그래서 첫 번째 단계는 코드를 메서드 안에 넣는 것입니다.이 코드는 생성자 또는 일반 메서드 일 수 있습니다.

두 번째 단계는이 메서드를 호출해야한다는 것입니다. 그것이 생성자에 있으면 클래스의 새 인스턴스가 만들어 질 때마다 (그리고 매번) 실행됩니다. 그렇지 않으면 클래스를 인스턴스화 한 다음 메소드를 호출해야합니다.

세 번째 단계는 프로그램을 시작할 때 모든 코드를 시작해야한다는 것입니다. JVM이 특정 클래스를 "실행"하도록 지시하여 Java 프로그램을 시작하면이 클래스는 public static void main String [] args) 메소드는 모든 자바 애플리케이션의 엔트리 포인트이다.

단지 테스트하고 싶다면 기본 방법 안에 5 줄의 코드를 모두 넣으십시오.

그래서

import java.io.File; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 


public class Run { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     JFileChooser fileChooser = new JFileChooser(); 
     fileChooser.showOpenDialog(frame); 
     File selFile = fileChooser.getSelectedFile(); 
     Reader reader = new Reader(selFile); 
    } 
} 
관련 문제