2013-04-22 2 views
1

У меня серьезная проблема. Вопрос: java.awt.HeadlessExceptionБезголовое исключение в JFilechooser

Теперь проблема, я написал один и тот же код до месяца, и он работал отлично в Windows 7 & NetBeans 7.1 Разница в том, что он написал код в сервлет Но я был написать в файле Java & затем вызовите метод из сервлета.

BELIEVE ME IT'S 100% WORKS. 

Но сейчас я нахожусь в Windows 8 & NetBeans 7.3 Только это два является changed.Now он не работает дает Безголовый Exception. Что я могу сделать???
Теперь скажите, пожалуйста, как загрузить файл? Мне нужен полный путь к каталогу, он будет сохранять в базе данных.
Register.jsp:

<a href="UploadUserImage"> 
    <input type="button" class="button round blue image-right ic-upload text-upper" value="Upload" name="upload"/> 
</a> 
<font style="font-family: Times New Roman; font-size: 16px; color: #2a2e36; font-style: italic;"><%= image %></font> 
<input type="hidden" value="images/Member/<%= image %>" name="image"/> 

UploadImage.java (Servlet):

String image="images/"+new UploadFile().Upload(); 
request.getRequestDispatcher("Register.jsp?image="+image).forward(request, response); 

UploadFile.java:

public class UploadFile 
{ 
File file; 
public String Upload() 
{ 
    try 
    { 

    final JFileChooser fc = new JFileChooser(); 
    String[] extensions={"jpg", "png", "gif"}; 
    FileNameExtensionFilter filter=new FileNameExtensionFilter("Images", extensions); 
    fc.setFileFilter(filter); 
    fc.setMultiSelectionEnabled(false); 
    //fc.setCurrentDirectory(new File("C:\\tmp")); 
    fc.setApproveButtonText("Upload"); 
    int retVal = fc.showOpenDialog(new JPanel()); 
    file=fc.getSelectedFile(); 
    String src,dst; 
    src=file.getAbsolutePath(); 
    dst="C:\\Users\\SHUVAM KAYAL\\Documents\\NetBeansProjects\\BookShopManagment\\BookShopManagment-war\\web\\images\\Member\\"+file.getName(); 
    copy(new File(src), new File(dst)); 
    } 
    catch (IOException ex) 
    {} 
    catch(NullPointerException e) 
    {} 

    return file.getName(); 
} 
public void copy(File sourceLocation , File targetLocation) throws IOException { 
    if (sourceLocation.isDirectory()) { 
     if (!targetLocation.exists()) { 
      targetLocation.mkdir(); 
     } 

     String[] children = sourceLocation.list(); 
     for (int i=0; i<children.length; i++) { 
      copy(new File(sourceLocation, children[i]), 
        new File(targetLocation, children[i])); 
     } 
    } else { 

     InputStream in = new FileInputStream(sourceLocation); 
     OutputStream out = new FileOutputStream(targetLocation); 

     // Copy the bits from instream to outstream 
     byte[] buf = new byte[1024]; 
     int len; 
     while ((len = in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
     in.close(); 
     out.close(); 
    } 
} 


} 
+1

хорошо, если мы не видим ваш код, мы ничего не можем сказать – Satya

+0

ОК, я опубликую. –

+1

Код выбора файла, который вы пытаетесь запустить, будет выполняться на сервере, а не на компьютере-клиенте, так что ваш сервер работает в режиме безглавых (не видео-видео/видео) – MadProgrammer

ответ

5

Вы смешиваете понятия о WebApplication (HTML/JSP/Servlet/Java EE и друзей) и DesktopApplication (AWT/Swing/JavaFX и друзей). Хотя есть возможное сочетание &, в вашем случае это не имеет никакого смысла.

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

Правильный способ сделать это - добавить <input type="file" name="file"> в форме <form enctype="multipart/form-data" method="post">, а затем извлечь данные из запроса.

Кстати, при открытии JFileChooser вы не можете передать случайный родительский компонент, как этот fc.showOpenDialog(new JPanel()) но вы должны обеспечить соответствующий компонент, который уже отображается в Window (но это не относится к данному случаю).

Рассмотрите также, что у вас не было catch(Exception e) блоков, подобных вам. Когда это происходит, это делает его очень трудным для отладки.

+0

Спасибо за ваше ценное предложение. Я ищу об этом в настоящее время и нашел, что вы правы. Это похоже на работу, но на самом деле нет. Я работаю над этим. enctype = "multipart/form-data" - Это совершенно новая вещь для меня. Если у меня возникли проблемы, я пишу ее здесь. Спасибо. –

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