类中的Java类

时间:2016-04-13 15:08:29

标签: java eclipse

好的,我编译了我的脚本,输出了5个类,BankValueGUI,BankValueGUI $ 1,BankValueGUI $ 2&等等。我不小心删除了源文件,所以我不得不对它进行反编译,但它没有反编译成1 .java文件,它被反编译为5 ..在尝试放置Class&#39时再次进入主班我继续接收错误,这是主要来源:

package scripts.BankChecker;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.JFileChooser;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;



public class BankValueGUI extends javax.swing.JFrame
{
  private javax.swing.JButton inputFileButton;
  private JFileChooser inputFileChooser;
  private javax.swing.JTextField inputFileField;
  private javax.swing.JLabel jLabel1;
  private javax.swing.JButton startButton;

  public BankValueGUI()
  {

    initComponents();

  }

  private void initComponents()
  {


    inputFileChooser = new JFileChooser();
    jLabel1 = new javax.swing.JLabel();
    inputFileField = new javax.swing.JTextField();
    inputFileButton = new javax.swing.JButton();
    startButton = new javax.swing.JButton();

    inputFileChooser.setAcceptAllFileFilterUsed(false);
    inputFileChooser.setApproveButtonText("Choose this file");
    inputFileChooser.setApproveButtonToolTipText("Make sure there is one account per line, in user:pass format");
    inputFileChooser.setCurrentDirectory(new java.io.File(System.getProperty("user.home")));

    inputFileChooser.setDialogTitle("Choose the text file containing accounts to check");
    inputFileChooser.setFileFilter(new javax.swing.filechooser.FileNameExtensionFilter("TEXT FILES", new String[] { "txt", "text" }));
    inputFileChooser.addActionListener(new BankValueGUI$1(this));





    setDefaultCloseOperation(3);

    jLabel1.setText("Input File:");

    inputFileField.setEditable(false);
    inputFileField.setText("The file containing accounts to check");

    inputFileButton.setText("Browse");
    inputFileButton.addActionListener(new BankValueGUI$2(this));





    startButton.setText("Start");
    startButton.setEnabled(false);
    startButton.addActionListener(new BankValueGUI$3(this));





    GroupLayout layout = new GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addContainerGap()
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addGap(8, 8, 8)
      .addComponent(jLabel1)
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
      .addComponent(inputFileField, -2, 331, -2)
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
      .addComponent(inputFileButton)
      .addGap(0, 12, 32767))
      .addGroup(layout.createSequentialGroup()
      .addComponent(startButton, -1, -1, 32767)
      .addContainerGap()))));

    layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addContainerGap()
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
      .addComponent(jLabel1)
      .addComponent(inputFileField, -2, -1, -2)
      .addComponent(inputFileButton))
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
      .addComponent(startButton)
      .addContainerGap(-1, 32767)));


    pack();
  }

  private void inputFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
    inputFileChooser.showOpenDialog(this);
  }

  private void inputFileChooserActionPerformed(java.awt.event.ActionEvent evt) {
    inputFileField.setText(inputFileChooser.getSelectedFile().getAbsolutePath());
    startButton.setEnabled(true);
  }

  private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
    ScriptWorker.inFile = inputFileChooser.getSelectedFile();
    ScriptWorker.guiDone = true;
    dispose();
  }







  public static void main(String[] args)
  {
    try
    {
      for (javax.swing.UIManager.LookAndFeelInfo info : ) {
        if ("Windows".equals(info.getName())) {
          javax.swing.UIManager.setLookAndFeel(info.getClassName());
          break;
        }
      }
    } catch (ClassNotFoundException ex) {
      java.util.logging.Logger.getLogger(BankValueGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
      java.util.logging.Logger.getLogger(BankValueGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
      java.util.logging.Logger.getLogger(BankValueGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
      java.util.logging.Logger.getLogger(BankValueGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }



    java.awt.EventQueue.invokeLater(new BankValueGUI$4());
  }
}

以及这里的课程

  class 1 implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent evt) {
            BankValueGUI.access$0(BankValueGUI.this, evt);
        }
    }

  class 2 implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent evt) {
            BankValueGUI.access$1(BankValueGUI.this, evt);
        }
    }

  class 3 implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent evt) {
            BankValueGUI.access$2(BankValueGUI.this, evt);
        }
    }

  class 4 implements Runnable {
        @Override
        public void run() {
           new BankValueGUI().setVisible(true);
        }
    }

请注意,我没有使用扩展的图书馆如此库存,因此关于TRIBOT相关内容的结尾会有更多错误。

2 个答案:

答案 0 :(得分:2)

  

但它没有反编译成1 .java文件,它被反编译为5

那是因为它不是一类。

按照惯例将匿名类编译为名为ContainingClass$Number的类,但没有理由不能创建一个明确调用的类 - 因此无法知道BankValueGUI$1是一个嵌套类,而不是具有相同名称的顶级类。

  

在尝试再次将Class放入主类时,我继续收到错误

类名必须是有效的Java标识符。 Java标识符不能以数字开头。 (见JLS Section 3.8)。

反编译器没有创建一个名为BankValueGUI$1的类或其他任何东西,但这只是反编译器中的一个错误(或者至少是一个“功能”),这是非常可疑的。

答案 1 :(得分:2)

在JVM中没有内部类的概念。 java编译器javac将内部类编译为单独的类,如BankValueGUI $ 1等等,每个非静态类都有一个成员,这个$ 0引用外部类实例。

因此每个内部类本身都是一个单独的类(尽管你不能在类中使用这些名称,因为它们不会通过编译器)。类名和方法名必须是有效的Java标识符(JLS Section 3.8)。

至于你的错误,请看一下:

class 1 implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent evt) {
            BankValueGUI.access$0(BankValueGUI.this, evt);
        }
    }
}

这里访问$ 0是javac添加的一个方法,用于支持访问外部类实例字段的内部类,访问$ 0不是有效名称。显然你会得到一个错误。

对您的类文件进行反编译并期望使用最少的更改来运行代码并不是一件容易的事。你可能需要改变很多。更具体地说,你必须使所有这些类成为内部类。