1

我正在做一个程序来从 DAG 计算关键路径方法,程序逻辑是完美的,但是我在尝试集成图形用户界面时遇到了问题。该界面让我通过 JFileChooser 为程序选择输入文件,但我不知道如何将该参数传递给位于主操作中的函数“readfile”。

下面是 void main 的代码:

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){
        }
    }

我正在为文件选择界面上的按钮执行此操作,并且我希望可以以某种方式将该文件的名称发送到 void main 以便能够使用函数“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

您需要在两个地方更改代码。我假设按钮操作实际上是有效的。我假设您的“主”类称为“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 回答
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());

注意*
这不一定是可用的最佳解决方案。但是,它涉及对已经存在的源代码的最少更改。另外,请原谅我的 Pascal 表示法,C# 的习惯。

于 2012-04-29T20:22:32.923 回答