⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 verifierappframe.java

📁 该开源工具主要用于class文件的操作
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        aboutMenuItem_actionPerformed(e);      }    });    jSplitPane2.add(messagesPanel, JSplitPane.BOTTOM);    messagesPanel.add(messagesScrollPane, null);    messagesScrollPane.getViewport().add(messagesTextPane, null);    jSplitPane2.add(jPanel3, JSplitPane.TOP);    jPanel3.add(jScrollPane3, null);    jScrollPane3.getViewport().add(pass1TextPane, null);    jPanel3.add(jScrollPane4, null);    jPanel3.add(jSplitPane3, null);    jSplitPane3.add(jScrollPane2, JSplitPane.LEFT);    jScrollPane2.getViewport().add(pass3aJList, null);    jSplitPane3.add(jScrollPane5, JSplitPane.RIGHT);    jScrollPane5.getViewport().add(pass3aTextPane, null);    jPanel3.add(jSplitPane4, null);    jSplitPane4.add(jScrollPane6, JSplitPane.LEFT);    jScrollPane6.getViewport().add(pass3bJList, null);    jSplitPane4.add(jScrollPane7, JSplitPane.RIGHT);    jScrollPane7.getViewport().add(pass3bTextPane, null);    jScrollPane4.getViewport().add(pass2TextPane, null);    jSplitPane1.add(jPanel2, JSplitPane.TOP);    jPanel2.add(jScrollPane1, null);    jSplitPane1.add(jPanel1, JSplitPane.BOTTOM);    jPanel1.add(jSplitPane2, null);    jScrollPane1.getViewport().add(classNamesJList, null);    jMenuBar1.add(jMenu1);    jMenuBar1.add(jMenu2);    contentPane.add(jSplitPane1, "jSplitPane1");    jMenu1.add(newFileMenuItem);    jMenu2.add(whatisMenuItem);    jMenu2.add(aboutMenuItem);    jSplitPane2.setDividerLocation(300);    jSplitPane3.setDividerLocation(150);    jSplitPane4.setDividerLocation(150);  }  /** Overridden to stop the application on a closing window. */  protected void processWindowEvent(WindowEvent e) {    super.processWindowEvent(e);    if (e.getID() == WindowEvent.WINDOW_CLOSING) {      System.exit(0);    }  }  synchronized void classNamesJList_valueChanged(ListSelectionEvent e) {    if (e.getValueIsAdjusting()) return;    current_class = classNamesJList.getSelectedValue().toString();    verify();    classNamesJList.setSelectedValue(current_class, true);  }  private void verify(){    setTitle("PLEASE WAIT");    Verifier v = VerifierFactory.getVerifier(current_class);    v.flush(); // Don't cache the verification result for this class.    VerificationResult vr;    vr =  v.doPass1();    if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){      pass1TextPane.setText(vr.getMessage());      pass1TextPane.setBackground(Color.red);      pass2TextPane.setText("");      pass2TextPane.setBackground(Color.yellow);      pass3aTextPane.setText("");      pass3aJList.setListData(new Object[0]);      pass3aTextPane.setBackground(Color.yellow);      pass3bTextPane.setText("");      pass3bJList.setListData(new Object[0]);      pass3bTextPane.setBackground(Color.yellow);    }    else{ // Must be VERIFIED_OK, Pass 1 does not know VERIFIED_NOTYET      pass1TextPane.setBackground(Color.green);      pass1TextPane.setText(vr.getMessage());      vr = v.doPass2();      if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){        pass2TextPane.setText(vr.getMessage());        pass2TextPane.setBackground(Color.red);        pass3aTextPane.setText("");        pass3aTextPane.setBackground(Color.yellow);        pass3aJList.setListData(new Object[0]);        pass3bTextPane.setText("");        pass3bTextPane.setBackground(Color.yellow);        pass3bJList.setListData(new Object[0]);      }      else{ // must be Verified_OK, because Pass1 was OK (cannot be Verified_NOTYET).          pass2TextPane.setText(vr.getMessage());          pass2TextPane.setBackground(Color.green);          JavaClass jc = Repository.lookupClass(current_class);          boolean all3aok = true;          boolean all3bok = true;          String all3amsg = "";          String all3bmsg = "";          String[] methodnames = new String[jc.getMethods().length];          for (int i=0; i<jc.getMethods().length; i++){            methodnames[i] = jc.getMethods()[i].toString().replace('\n',' ').replace('\t',' ');          }          pass3aJList.setListData(methodnames);          pass3aJList.setSelectionInterval(0,jc.getMethods().length-1);          pass3bJList.setListData(methodnames);          pass3bJList.setSelectionInterval(0,jc.getMethods().length-1);      }    }    String[] msgs = v.getMessages();    messagesTextPane.setBackground(msgs.length == 0? Color.green : Color.yellow);    String allmsgs = "";    for (int i=0; i<msgs.length; i++){      msgs[i] = msgs[i].replace('\n',' ');      allmsgs += msgs[i] + "\n\n";    }    messagesTextPane.setText(allmsgs);    setTitle(current_class + " - " + JUSTICE_VERSION);  }  void newFileMenuItem_actionPerformed(ActionEvent e) {    String classname = JOptionPane.showInputDialog("Please enter the fully qualified name of a class or interface to verify:");    if ((classname == null) || (classname.equals(""))) return;    VerifierFactory.getVerifier(classname); // let observers do the rest.    classNamesJList.setSelectedValue(classname, true);  }  synchronized void pass3aJList_valueChanged(ListSelectionEvent e) {    if (e.getValueIsAdjusting()) return;    Verifier v = VerifierFactory.getVerifier(current_class);    String all3amsg = "";    boolean all3aok = true;    boolean rejected = false;    for (int i=0; i<pass3aJList.getModel().getSize(); i++){      if (pass3aJList.isSelectedIndex(i)){        VerificationResult vr = v.doPass3a(i);        if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){          all3aok = false;          rejected = true;        }        all3amsg += "Method '"+Repository.lookupClass(v.getClassName()).getMethods()[i]+"': "+vr.getMessage().replace('\n',' ')+"\n\n";      }    }    pass3aTextPane.setText(all3amsg);    pass3aTextPane.setBackground(all3aok? Color.green : (rejected? Color.red : Color.yellow));  }  synchronized void pass3bJList_valueChanged(ListSelectionEvent e) {    if (e.getValueIsAdjusting()) return;    Verifier v = VerifierFactory.getVerifier(current_class);    String all3bmsg = "";    boolean all3bok = true;    boolean rejected = false;    for (int i=0; i<pass3bJList.getModel().getSize(); i++){      if (pass3bJList.isSelectedIndex(i)){        VerificationResult vr = v.doPass3b(i);        if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){          all3bok = false;          rejected = true;        }        all3bmsg += "Method '"+Repository.lookupClass(v.getClassName()).getMethods()[i]+"': "+vr.getMessage().replace('\n',' ')+"\n\n";      }    }    pass3bTextPane.setText(all3bmsg);    pass3bTextPane.setBackground(all3bok? Color.green : (rejected? Color.red : Color.yellow));  }  void aboutMenuItem_actionPerformed(ActionEvent e) {    JOptionPane.showMessageDialog(this,            "JustIce is a Java class file verifier.\nIt was implemented by Enver Haase in 2001.\nhttp://bcel.sourceforge.net",             JUSTICE_VERSION, JOptionPane.INFORMATION_MESSAGE);  }  void whatisMenuItem_actionPerformed(ActionEvent e) {    JOptionPane.showMessageDialog(this,            "The upper four boxes to the right reflect verification passes according to The Java Virtual Machine Specification.\nThese are (in that order): Pass one, Pass two, Pass three (before data flow analysis), Pass three (data flow analysis).\nThe bottom box to the right shows (warning) messages; warnings do not cause a class to be rejected.",             JUSTICE_VERSION, JOptionPane.INFORMATION_MESSAGE);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -