2013-09-26 3 views
1

Так что у меня возникают проблемы с реализацией JFileChooser, Im делает очень простую программу, которая должна захватывать 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 ничего не происходит, если вы не вызываете вызов метода, и ничего не должно произойти.

Итак, первый шаг для вас состоит в том, чтобы поместить код внутри метода, это может быть конструктор или простой метод.

Второй шаг заключается в том, что вы должны назвать этот метод. Если он находится в конструкторе, он выполняется, когда (и каждый раз) создается новый экземпляр вашего класса. В противном случае вам нужно создать класс, а затем вызвать метод.

Третий шаг заключается в том, что весь код необходимо инициировать, когда программа запускается, вы запускаете Java-программу, указывая JVM на «запуск» определенного класса, тогда этот класс должен иметь общедоступную статическую void main (String [] args), который является точкой входа для каждого приложения Java.

Если вы просто хотите что-то проверить, поместите все 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); 
    } 
} 
Смежные вопросы