2012-02-27 94 views
1

我正在研究我的論文並需要幫助。我的論文的一部分是我需要創建一個遊戲選擇器,我的連接類型是藍牙,客戶端是android手機,服務器是java。 Iam使用JFileChooser來獲取數組的值,我需要將該數組傳遞給另一個類。我試圖按照這個帖子http://www.dreaminco...ifferent-class/但在我的節目我似乎無法得到它在這裏工作是我的代碼:從另一個類獲取數組

DemoJFileChooser(班我會得到排列爲路徑[])

package com.luugiathuy.apps.remotebluetooth; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.io.File; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class DemoJFileChooser extends JPanel implements ActionListener { 
    JButton go; 

    JFileChooser chooser; 
    String choosertitle; 
    public int x=0; 
    public String path[] = new String[10]; 

    public DemoJFileChooser() { 
    go = new JButton("Do it"); 
    go.addActionListener(this); 
    add(go); 
    } 

    public Dimension getPreferredSize(){ 
    return new Dimension(200, 200); 
    } 

    public static void main(String s[]) { 
     Thread waitThread = new Thread(new WaitThread()); 
     waitThread.start(); 

    JFrame frame = new JFrame(""); 
    DemoJFileChooser panel = new DemoJFileChooser(); 
    frame.addWindowListener(
     new WindowAdapter() { 
     public void windowClosing(WindowEvent e) { 
      System.exit(0); 
      } 
     } 
    ); 
    frame.getContentPane().add(panel,"Center"); 
    frame.setSize(panel.getPreferredSize()); 
    frame.setVisible(true); 
    } 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 
    int result; 

    chooser = new JFileChooser(); 
    chooser.setCurrentDirectory(new java.io.File(".")); 
    chooser.setDialogTitle(choosertitle); 
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
     // 
    // disable the "All files" option. 
    // 
    chooser.setAcceptAllFileFilterUsed(false); 
    //  

    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { 
     System.out.println("getCurrentDirectory(): " 
     + chooser.getCurrentDirectory()); 
     System.out.println("getSelectedFile() : " 
     + chooser.getSelectedFile()); 

      File paths = chooser.getSelectedFile(); 
      path[x] = paths.getAbsoluteFile().toString(); 
      x++; 

    for (int y=0;y<9;y++){ 
      System.out.println(path[y]); 
      setArray(path); 

    } 
    } 
    else { 
     System.out.println("No Selection "); 
     } 

} 
    void setArray(String paths[]) { // saves surname to variable 
      path= paths; 

    } 

    String[] getArray() { //gets the surname when called 
      return path; 
    } 
} 

ProcessConnectionThread(類由我所需要的陣列)

package com.luugiathuy.apps.remotebluetooth; 

import java.awt.MouseInfo; 
import java.awt.Point; 
import java.awt.PointerInfo; 
import java.awt.Robot; 
import java.awt.event.InputEvent; 
import java.awt.event.KeyEvent; 
import java.io.InputStream; 
import java.io.OutputStream; 
import com.luugiathuy.apps.remotebluetooth.DemoJFileChooser; 


import javax.microedition.io.StreamConnection; 

public class ProcessConnectionThread implements Runnable{ 
    //DemoJFileChooser path; 
    //public String[] path = new String[10]; 

    private StreamConnection mConnection; 

    // Constant that indicate command from devices 
    //private static final int EXIT_CMD = -1; 
    private static final int STEER_RIGHT = 1; 
    private static final int STEER_LEFT = 2; 
    private static final int ACCE = 3; 
    private static final int REV = 4; 
    private static final int MOVE = 5; 
    private static final int LEFT_CLICK = 6; 
    private static final int DOUBLE_CLICK = 7; 
    private static final int RIGHT_CLICK = 8; 
    private static final int HOLD = 9; 
    private static final int RELEASE = 10; 
    private static final int MOVEX = 11; 
    private static final int MOVEY = 12; 
    private static final int GAME = 20; 
    private static final int GAME1 = 11; 
    private static final int GAME2 = 12; 
    private static final int GAME3 = 13; 
    private static final int GAME4 = 14; 
    private static final int GAME5 = 15; 
    private DemoJFileChooser patharray[] = new DemoJFileChooser[10]; //create object array from student class 

    public ProcessConnectionThread(StreamConnection connection) 
    { 
     mConnection = connection; 
    } 

    public void FileChooser() { //constructor use keyword public just to make sure it is visible 
     for (int studI=0;studI<10;studI++) { 
      patharray[studI] = new DemoJFileChooser(); 
     } 
    } 
    @Override 
    public void run() { 
     try { 

      // prepare to receive data 
      InputStream inputStream = mConnection.openInputStream(); 
      OutputStream outputStream = mConnection.openOutputStream(); 
      System.out.println("waiting for input"); 

      while (true) { 
       int command = inputStream.read(); 
       System.out.println(command); 

       processCommand(command); 

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

    /** 
    * Process the command from client 
    * @param command the command code 
    */ 
    private void processCommand(int command) { 
     try { 


      case GAME1: 
       for (int y=0;y<10;y++){ 
         patharray[y].getArray(); 
         System.out.println(patharray[y]); 
       } 
       Process p = Runtime.getRuntime().exec(patharray[0]); 
       p.waitFor(); 



       break; 


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


    } 

我在遇到錯誤的for循環,patharray []。

任何幫助/建議將不勝感激。謝謝。

+0

錯誤信息說什麼? – Mahesh 2012-02-27 20:59:50

+0

http://i630.photobucket.com/albums/uu26/damnjeka/error.jpg – 2012-02-27 21:13:15

回答

1

創建數組深度複製的最簡單方法是使用內置的Arrays.copyOf函數系列。

例如:

String [] srcArray = { "item 1", "item 2", "item 3" }; 
String [] copy = Arrays.copyOf(srcArray, srcArray.length); 

至於你的代碼去,有跳出幾個問題。在DemoJFileChooser.actionPerformed中,您始終通過System.out.println打印路徑數組的所有10個元素,但不能保證所有這些元素中都有對象。你可能會在這裏得到一個NullPointerException。您的for-loop應限制爲x。此外,在該循環內,您打電話給setArray(path),這意味着您無緣無故地調用了該函數10次。此外,您真的在做path = path,因爲您將path傳遞給setArray,該地址指定給路徑。

您還應該檢查x尚未超過path的大小,當您將它分配給path[x] = paths.getAbsoluteFile().toString();時。

作爲一個單獨的建議,不要每次迭代數組時執行for(int i=0; i<10; i++) {...},您可能希望使用for(int i=0; i<theArray.length; i++) {...},這樣如果您更改了數組大小,則不需要去更新for循環遍佈你的程序。