2016-06-14 4 views
-1

配列内のすべての項目をJListに入れるループを作成しようとすると、NullPointerExceptionが発生し、何が起こっているのかわからないという問題が発生します。Java ftp:配列をJlistにループ

私は正確にどのように言葉これを知らない*、私はここだけ

非常に困惑している私は上の問題を抱えています一部です:あなたは、いくつかのより多くのコードが必要な場合

String[] files = null; 

try { 
//Something here 
    files = client.listNames(); 
    for(String item: files){ 
     model.addElement(item); 
    } 

JList list = new JList(model); 
list.setSelectionMode(0); 
JScrollPane scroll = new JScrollPane(list); 
scroll.setBounds(110, 10, 560, 630); 
pane.add(scroll); 

}catch (IOException e) { 
    e.printStackTrace(); 
} 

、ここでは完全なプログラムです: パッケージp1;

import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.SocketException; 

import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 

import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 

public class OperaFTP{ 

private static FTPClient client = new FTPClient(); 
private static OperaFTP Operation = new OperaFTP(); 
private static JLabel Cr; 
JFrame loginWindow = new JFrame("Login"); 

public static void main(String[] args){ 
    Operation.firstWindow(); 
} 

private void firstWindow(){ 

    JPanel loginPane = new JPanel(null); 

    JLabel title; 
    JLabel ftpMore; 
    JLabel userName; 
    JLabel passWord; 

    JButton connect = new JButton("Connect"); 

    loginWindow.setDefaultCloseOperation(3); 
    loginWindow.setSize(300, 340); 
    loginWindow.setResizable(false); 
    loginWindow.setLocationRelativeTo(null); 

    loginWindow.add(loginPane); 

    title = new JLabel("FTP LOGIN"); 
    title.setFont(new Font("Times New Roman", 1, 40)); 
    title.setForeground(Color.RED); 
    title.setBounds(35, 6, 300, 60); 
    loginPane.add(title); 

    ftpMore = new JLabel("ftp://"); 
    ftpMore.setBounds(20, 76, 60, 30); 
    ftpMore.setForeground(Color.BLUE); 
    ftpMore.setFont(new Font("Times New Roman", 0, 16)); 
    loginPane.add(ftpMore); 

    JTextField ftpIp = new JTextField(); 
    ftpIp.setBounds(50, 80, 190, 25); 
    loginPane.add(ftpIp); 

    userName = new JLabel("Username:"); 
    userName.setBounds(70, 115, 60, 30); 
    userName.setFont(new Font("Times New Roman", 0, 14)); 
    loginPane.add(userName); 

    JTextField userField = new JTextField(); 
    userField.setBounds(70, 140, 150, 25); 
    loginPane.add(userField); 

    passWord = new JLabel("Password:"); 
    passWord.setBounds(70, 175, 60, 30); 
    passWord.setFont(new Font("Times New Roman", 0, 14)); 
    loginPane.add(passWord); 

    JPasswordField passField = new JPasswordField(); 
    passField.setBounds(70, 200, 150, 25); 
    loginPane.add(passField); 

    connect.setBounds(75, 240, 140, 40); 
    connect.setFont(new Font("Arial", 2, 18)); 
    loginPane.add(connect); 

    Cr = new JLabel("Save credentials"); 
    Cr.setBounds(95, 280, 200, 30); 
    loginPane.add(Cr); 

    JCheckBox saveCr = new JCheckBox(); 
    saveCr.setBounds(75, 285, 20, 20); 
    loginPane.add(saveCr); 

    File ftpC = new File(System.getProperty("user.home") + "\\Documents\\FTPFILECREDIANTIALS.txt"); 

    String xx = null; 
    String xx2 = null; 
    String xx3 = null; 
    if (ftpC.exists()){ 
     try{ 
     BufferedReader read = new BufferedReader(new FileReader(ftpC)); 

     xx = read.readLine(); 
     xx2 = read.readLine(); 
     xx3 = read.readLine(); 

     read.close(); 
     } 
     catch (IOException e1){ 
     System.out.println("FILE NOT FOUND/CANT READ FROM FILE"); 
     } 
    } 

    ftpIp.setText(xx); 
    userField.setText(xx2); 
    passField.setText(xx3); 

    saveCr.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent e){ 
     try{ 
      PrintWriter write = new PrintWriter(ftpC); 

      write.println(ftpIp.getText()); 
      write.println(userField.getText()); 
      write.print(passField.getPassword()); 

      write.close(); 
     } 
     catch (FileNotFoundException e1){ 
      System.out.println("FILE NOT FOUND:" + e1); 
     } 
     } 
    }); 

    connect.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent e){ 
     String user = null; 
     String pass = null; 
     String server = null; 

     server = ftpIp.getText(); 
     user = userField.getText(); 
     char[] passs = passField.getPassword(); 
     pass = passs.toString(); 

     try{ 
      login(server, user, pass); 
     } catch (IOException e1) { 
      System.out.println(e1); 
     } 

     } 

    }); 

    loginWindow.setVisible(true); 
} 

public static void login(String server, String user, String pass) throws SocketException, IOException{ 
    client.connect(server, 21); 
    client.login(user, pass); 
    client.enterLocalPassiveMode(); 
    client.setFileType(FTP.BINARY_FILE_TYPE); 

    boolean success = client.isConnected(); 

    if(success){ 
     Operation.loginWindow.dispose(); 
     frame(); 
    }else{ 

    } 

} 

@SuppressWarnings("unchecked") 
public static void frame(){ 

    JFrame window = new JFrame(); 
    JPanel pane = new JPanel(null); 

    DefaultListModel model = new DefaultListModel(); 

    window.setSize(700, 700); 
    window.setResizable(false); 
    window.setLocationRelativeTo(null); 

    window.add(pane); 

    JButton upload = new JButton("Upload"); 
    upload.setBounds(5, 5, 90, 30); 
    upload.setFont(new Font("Arial", 0, 12)); 
    pane.add(upload); 

    JButton download = new JButton("Download"); 
    download.setBounds(5, 40, 90, 30); 
    download.setFont(new Font("Arial", 0, 12)); 
    pane.add(download); 

    JButton delete = new JButton("Delete"); 
    delete.setBounds(5, 75, 90, 30); 
    delete.setFont(new Font("Arial", 0, 12)); 
    pane.add(delete); 

    String[] files = null; 

    try { 

     files = client.listNames(); 
     for(String item: files){ 
      model.addElement(item); 
     } 

     JList list = new JList(model); 
     list.setSelectionMode(0); 
     JScrollPane scroll = new JScrollPane(list); 
     scroll.setBounds(110, 10, 560, 630); 
     pane.add(scroll); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    window.addWindowListener(new WindowAdapter(){ 
     public void windowClosing(WindowEvent windowEvent){ 
      try{ 
      client.disconnect(); 
      client.logout(); 
      } 
      catch (IOException localIOException) {} 
      System.exit(1); 
     } 
     }); 

    window.setVisible(true); 

    } 

} 

エラーp1.OperaFTP.frame(OperaFTP.java:224)におけるスレッド "AWT-EventQueueの-0" java.lang.NullPointerExceptionが で例外p1.OperaFTP.login(OperaFTPで 。 Javaの:183) のjavaxでjavax.swing.AbstractButton $ Handler.actionPerformedでjavax.swing.AbstractButton.fireActionPerformedでp1.OperaFTP $ 2.actionPerformed(OperaFTP.java:161) (不明なソース) (不明なソース) で.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) (javax.swing.DefaultButtonModel.setPressed) (不明なソース)javax.swing.plaf.basic.BasicButtonListener.mouseReleasedで (不明なソース)java.awt.Component.processMouseEventで (不明なソース)javax.swing.JComponent.processMouseEventで (不明なソース) のjavaでjava.awt.Container.dispatchEventImplでjava.awt.Component.dispatchEventImpl(不明なソース) でjava.awt.Container.processEvent(不明なソース) で.awt.Component.processEvent(不明なソース) (不明なソース) java.awt.Component.dispatchEvent(不明なソース) at java.awt.LightweightDispatcher.retargetMouseEvent(不明なソース) at java.awt.LightweightDispatcher.processMouseEvent(不明なソース) at java.awt.LightweightDi spatcher.dispatchEvent(不明なソース)java.awt.Component.dispatchEventでjava.awt.Window.dispatchEventImpl(不明なソース) でjava.awt.Container.dispatchEventImpl(不明なソース) (不明なソース)は、Javaで で 。 (未知のソース) at java.awt.EventQueue $ 3.run(不明なソース) すべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilegeですべてjava.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(不明なソース) (不明なソース)でjava.security.AccessController.doPrivileged(ネイティブメソッド) で) すべてjava.security.ProtectionDomain $ JavaSecurityAccessImplでjava.awt.EventQueue $ 4.run(不明なソース)でjava.awt.EventQueue $ 4.run(不明なソース)で java.security.AccessController.doPrivileged(ネイティブメソッド) で java.awtでのjava.awt.EventDispatchThread.pumpEventsForFilter(不明なソース) でjava.awt.EventQueue.dispatchEvent(不明なソース)java.awt.EventDispatchThread.pumpOneEventForFiltersで (不明なソース) で.doIntersectionPrivilege(不明なソース) (不明なソース) at java.awt.EventDispa(イベントソース) tchThread。(不明な情報源)

+0

は、あなたが完全なスタックトレースを投稿してくださいでした – Li357

+0

はい、私は、スタックトレース – Lezorical

+0

が追加されます?私はちょうど匿名アクセスでいくつかのFTPサーバー上であなたのコードを試して、それはファイルを表示します。ユーザー/パスワードが必要なサーバーを試しましたか? – Arjan

答えて

0

あなたのログインは失敗します。私のIDEはコード行の下でこの面白いくすんだ黄色い線を表示し、 "toString()"というArrayインスタンスを警告します。代わりのパスワード:

connect.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e){ 
     String user = null; 
     String pass = null; 
     String server = null; 

     server = ftpIp.getText(); 
     user = userField.getText(); 
     char[] passs = passField.getPassword(); 
     pass = passs.toString();    // <----- HERE 
System.out.println("pass: " + pass);   // <----- added for debugging 
     try{ 
      login(server, user, pass); 
     } catch (IOException e1) { 
      System.out.println(e1); 
     } 
    } 

System.out.printlnは "[36111b04 @ C合格" などの参照を印刷します。割り当てをpass = new String(passs);に変更してください。

Btw、これらの面白いくすんだ線の多くがあります。まさにこのNPEが発生した場合には、生タイプ、未使用の割り当てられた値...そしておそらく、上記と同様の問題がここで起こっているの使用、

saveCr.addItemListener(new ItemListener(){ 
     public void itemStateChanged(ItemEvent e){ 
     try{ 
      PrintWriter write = new PrintWriter(ftpC); 

      write.println(ftpIp.getText()); 
      write.println(userField.getText()); 
      write.print(passField.getPassword()); // <---- HERE 

      write.close(); 
     } 
     catch (FileNotFoundException e1){ 
      System.out.println("FILE NOT FOUND:" + e1); 
     } 
     } 
    }); 
+0

いいえ、私は他のもの、私はこのようなプログラムを作ったが、すべてのコードを失ったことを知っていた、私はちょうど起こっていたことがわからなかった、 – Lezorical

+0

@Lezorical 'login'メソッドを少なくともいくつかのエラーそれが失敗した場合、コンソールにあなたがプログラムで作業している間に失敗したかどうかを知ることができるように、今度は空の 'else'ブロックにあります。 – Arjan

+0

それを得た、thx ...非常に有用:) – Lezorical