1

DAGからクリティカルパス法を計算するプログラムを実行しています。プログラムロジックは完璧ですが、グラフィカルユーザーインターフェイスを統合しようとすると問題が発生します。このインターフェイスでは、JFileChooserを使用してプログラムの入力ファイルを選択できますが、メインアクションにある関数「readfile」にそのパラメーターを渡す方法がわかりません。

ボイドメインのコードは次のとおりです。

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrameConFondo jf = new EjemploJFrameConFondo();
                jf.setLocationRelativeTo(null);
                jf.setTitle("CPM");
                jf.setVisible(true);
                readfile(route);
               ////I need to pass a filename to the program which calculate the critical path,
            }
        });
    }
}

関数「readfile」のコードは次のとおりです。

public static void leer_archivo(String fileName){
        try{
       File archivo=new File(fileName);
       FileReader fr= new FileReader(archivo);
       BufferedReader br= new BufferedReader(fr);
       String linea;


       linea=br.readLine();
       c=Integer.parseInt(linea);
       for(int i=0;i<c;i++){
           CrearCaso(br, i+1);
       }
        }catch(Exception e){
        }
    }

私はファイル選択のためのインターフェースのボタンに対してこのアクションを実行しています。そのファイルの名前を何らかの方法でvoidmainに送信して、関数「readfile」を使用できるようにしたいと思います。

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
         JFileChooser filechooser = new JFileChooser();
         int option = filechooser.showOpenDialog (this);
         if (option==JFileChooser.APPROVE_OPTION){
            cajaTexto.setText(filechooser.getSelectedFile().getPath());

        }

誰かが私にこれを手に入れてくれることを願っています。私はこれに数日間立ち往生していて、私は世界のJavaで本当に新しいです。いくつかのクラスと数行のコードがあるため、コード全体を入れませんでした。

4

2 に答える 2

1

わかりました、あなたの質問を正しく理解しているかどうかを確認させてください...関数内で呼び出したい
関数があります。 を使用してファイルへのパスを取得できます。 この場合、選択したパスをパブリック クラスの静的変数にエクスポートできます。readfile(String filename)main
filechooser.getSelectedFile().getPath()

したがって、新しいクラスを作成します。

public class Globals
{
  private static String FilePath;
  public static String GetFilePath()
  {
    return FilePath;
  }
  public static void SetFilePath(String NewPath)
  {
    FilePath = NewPath;
  }
}

次を使用してボタンで設定します。

Globals.SetFilePath(filechooser.getSelectedFile().getPath());

そして、それを次のように使用します。

readfile(Globals.GetFilePath());

注*
これは、必ずしも最善の解決策ではありません。ただし、既存のソースコードへの変更は最小限です。また、私のパスカル表記、C#からの癖をお許しください。

于 2012-04-29T20:22:32.923 に答える
1

2 つの場所でコードを変更する必要があります。ボタンアクションが実際に機能していると思います。あなたの「メイン」クラスは「MyProgram」と呼ばれていると思います。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
     JFileChooser filechooser = new JFileChooser();
     int option = filechooser.showOpenDialog (this);
     if (option==JFileChooser.APPROVE_OPTION){
        String filename = filechooser.getSelectedFile().getPath();
        cajaTexto.setText(filename);
        // call main():
        MyProgram.main(new String[] { filename });
    }

public static void main(String args[]) {
            // assign file name
    final String route = args[0];
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrameConFondo jf = new EjemploJFrameConFondo();
                jf.setLocationRelativeTo(null);
                jf.setTitle("CPM");
                jf.setVisible(true);
                readfile(route);
            }
        });
    }
}
于 2012-04-29T20:19:30.920 に答える