package com.redpois0n.panels; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Map; import java.util.jar.JarFile; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.LayoutStyle.ComponentPlacement; import com.redpois0n.ClassSelectEvent; import com.redpois0n.DialogSelectClass; import com.redpois0n.Frame; @SuppressWarnings("serial") public class Panel2MainClass extends PanelBase { private JComboBox<Object> cbMainClass; public JComboBox<Object> getComboBox() { return cbMainClass; } public Panel2MainClass() { super("Program Entry Class"); JLabel lblMainClassName = new JLabel("Main class name:"); cbMainClass = new JComboBox<Object>(); cbMainClass.setEditable(true); JButton btnBrowse = new JButton("Browse"); btnBrowse.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { DialogSelectClass d = new DialogSelectClass(new ClassSelectEvent() { public void onSelect(String clazz) { getComboBox().setSelectedItem(clazz); } }); d.setVisible(true); } }); GroupLayout groupLayout = new GroupLayout(this); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addGap(18) .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addComponent(cbMainClass, GroupLayout.PREFERRED_SIZE, 332, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(btnBrowse)) .addComponent(lblMainClassName)) .addContainerGap(17, Short.MAX_VALUE)) ); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addGap(21) .addComponent(lblMainClassName) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) .addComponent(cbMainClass, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addComponent(btnBrowse)) .addContainerGap(113, Short.MAX_VALUE)) ); setLayout(groupLayout); } public String getMainClass() { return cbMainClass.getSelectedItem().toString().trim(); } @Override public void opened() { try { Panel1SelectJar panel = (Panel1SelectJar) Frame.panels.get(0); JarFile jar = new JarFile(panel.getFile()); Map<Object, Object> map = jar.getManifest().getMainAttributes(); String mainClass = null; for (Object obj : map.keySet()) { if (obj.toString().equalsIgnoreCase("main-class")) { mainClass = map.get(obj).toString(); break; } } Panel2MainClass panelMainClass = (Panel2MainClass) Frame.panels.get(1); panelMainClass.getComboBox().setSelectedItem(mainClass); jar.close(); } catch (Exception ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(null, "Failed loading manifest: " + ex.getClass().getSimpleName() + ": " + ex.getMessage(), "jCrypt", JOptionPane.ERROR_MESSAGE); } } }