2014-11-24 3 views
0

Я пытаюсь создать программу, которая включает использование JFileChooser, чтобы пользователь мог предоставить программе путь к файлу для манипуляции. Когда я пытаюсь запустить JFileChooser, ничего не появляется, и программы приостанавливаются (или, скорее, кажется, что они приостанавливаются). Я чувствую, что JFileChooser работает, но не отображается графически. Я даже получаю значок программы Java в своем лотке приложения, когда он запускается, что я получаю только при запуске графических программ. Я щелкнул его и проверил доступные окна под запущенным приложением, но их нет. Я понятия не имею, почему это так. Мой код, даже если он очень похож на учебники, которые я нашел в Интернете, является:JFileChooser, похоже, работает, но не отображается

final JFileChooser userFile = new JFileChooser(); 
int response = userFile.showOpenDialog(null); 
if (response == JFileChooser.APPROVE_OPTION) 
    fileName = userFile.getSelectedFile().toString(); 
else 
    fileName = "The file open operation failed."; 

MCVE:

import lots of stuff; 

public class zipCracker { 

    private static String fileName; 

    public static void main(String[] args){ 
     String[] buttons = {"Cancel", "zDictionaryForm", "zZipCracker"}; 

     int rc = JOptionPane.showOptionDialog(null, 
               "Which program would you like to use?", 
               "Program Directory", 
               JOptionPane.WARNING_MESSAGE, 
               0, null, buttons, buttons[0]); 
     if(rc == 2) 
      zZipCracker(); 
     else if(rc == 1) 
      System.exit(0); 
     else 
      System.exit(0); 
    } 

    public static String zZipCracker(){ 
     final JFileChooser userFile = new JFileChooser(); 
     int response = userFile.showOpenDialog(null); 
     if (response == JFileChooser.APPROVE_OPTION) 
      fileName = userFile.getSelectedFile().toString(); 
     else 
      fileName = "The file open operation failed."; 


     //ZipFile zipper = new ZipFile(userFile); 
     return ""; 
    } 
} 
+0

Если вы не получить помощь в ближайшее время, рассмотреть возможность создания и размещения [Minimal, Complete, и пример программы Проверяемость] (http://stackoverflow.com/help/mcve), где конденсируется свой код в блок самый маленький бит, который все еще компилируется и запускается, не имеет внешних зависимостей (например, необходимость привязки к базе данных или изображениям), не имеет дополнительного кода, который не имеет отношения к вашей проблеме, но все же демонстрирует вашу проблему. –

+0

Кроме того, ваша программа - графический интерфейс Swing? Или это консольная программа? Если GUI Swing, рассмотрите возможность использования ненулевого параметра для вызова метода showOpenDialog (...) '. Если консольная программа, отличная от Swing, тогда вам нужно будет убедиться, что вы создаете и показываете свое диалоговое окно в потоке событий Swing. –

+0

Предполагается использовать Swing. Из того, что я собрал на странице документации из Oracle, предоставление параметра «null» должно просто заставить его всплывать в центре экрана. Я попытался создать JFrame, который занимает весь экран и устанавливает родителя для 'showOpenDialog (parent)' в JFrame, но я все равно ничего не получаю. – Zulfe

ответ

2

Кажется, что делает объект по JFileChooser глобальный, частный, и статический решена мой вопрос. Я понятия не имею, где разница между объявлением этого метода и объявлением его во всем мире, но он работает.

import stuff; 

public class zipCracker { 

    private static String fileName; 
    private static JFileChooser userFile = new JFileChooser(); //now declared globally 

    public static void main(String[] args){ 
     String[] buttons = {"Cancel", "zDictionaryForm", "zZipCracker"}; 

     int rc = JOptionPane.showOptionDialog(null, 
               "Which program would you like to use?", 
               "Program Directory", 
               JOptionPane.WARNING_MESSAGE, 
               0, null, buttons, buttons[0]); 
     System.out.println(rc); 
     if(rc == 2) 
      zZipCracker(); 
     else if(rc == 1) 
      System.exit(0); 
     else 
      System.exit(0); 
    } 

    public static String zZipCracker(){ 
     int returnVal = userFile.showDialog(null, "Choose This"); //used without being declared here in the method 
     if (returnVal == JFileChooser.APPROVE_OPTION) 
      fileName = userFile.getSelectedFile().toString(); 
     else 
      fileName = "The file open operation failed."; 


     //ZipFile zipper = new ZipFile(userFile); 
     return ""; 
    } 
} 
+0

Большое вам спасибо! Я застрял в этой проблеме часами, я не знаю, почему ее атрибут имеет значение, хотя –

Смежные вопросы