//************************************************************* // Jar内のクラスからそのJarファイルの情報を得る // 「JarNameGetTest」 // //          作 成 者:ルート高菜    //          作成開始月:2010/2 //          最終更新月:2010/2  [TN126/J116] //************************************************************* import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.net.JarURLConnection; import java.net.URL; import java.util.jar.JarFile; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class JarNameGetTest extends JPanel implements ActionListener { //Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る private static final long serialVersionUID=0; //------------------------------------------------------------------ // public static void main(String[] args) { JFrame frame=new JFrame(); frame.getContentPane().add(new JarNameGetTest()); frame.setTitle("JarNameGetTest"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //右上×印で終了 frame.setSize(700,150); frame.setVisible(true); frame.setLocationRelativeTo(null); //画面の真ん中に表示 } //------------------------------------------------------------------ // JButton buttonGet=new JButton("get"); JButton buttonReset=new JButton("reset"); JTextField fieldClassName=new JTextField(40); JTextField fieldClassURL=new JTextField(40); JTextField fieldJarURL=new JTextField(40); JTextField fieldFilePath=new JTextField(40); JTextField fieldJarPath=new JTextField(40); //------------------------------------------------------------------ // public JarNameGetTest(){ // JPanel buttonPanel=new JPanel(); buttonPanel.add(buttonGet); buttonPanel.add(buttonReset); // JPanel labelPanel=new JPanel(); labelPanel.setLayout(new GridLayout(5,1)); labelPanel.add(new JLabel("クラスの名前:")); labelPanel.add(new JLabel("クラスのURL:")); labelPanel.add(new JLabel("jarのURL:")); labelPanel.add(new JLabel("jarのFileのパス:")); labelPanel.add(new JLabel("jarのJarFileの名前:")); // JPanel fieldPanel=new JPanel(); fieldPanel.setLayout(new GridLayout(5,1)); fieldPanel.add(fieldClassName); fieldPanel.add(fieldClassURL); fieldPanel.add(fieldJarURL); fieldPanel.add(fieldFilePath); fieldPanel.add(fieldJarPath); // setLayout(new BorderLayout()); add(buttonPanel,BorderLayout.NORTH); add(labelPanel,BorderLayout.WEST); add(fieldPanel,BorderLayout.CENTER); // buttonGet.addActionListener(this); buttonReset.addActionListener(this); } //------------------------------------------------------------------ // public void actionPerformed(ActionEvent e) { Object object=e.getSource(); if(object==buttonGet){ // try{ //クラスの名前 String className=this.getClass().getName(); fieldClassName.setText(className); // //クラスのURL ClassLoader classLoader=this.getClass().getClassLoader(); URL classURL=classLoader.getResource(className+".class"); //クラス名に拡張子を付けねばいけない //fieldClassURL.setText(classURL.getPath()); fieldClassURL.setText(classURL.toString()); // //jarのURL(Jar内でないと戻り値の型が違って例外が発生する) JarURLConnection jarConn=(JarURLConnection)classURL.openConnection(); URL jarURL=jarConn.getJarFileURL(); //fieldJarURL.setText(jarURL.getPath()); fieldJarURL.setText(jarURL.toURI().toString()); // //jarのFileのパス File file=new File(jarURL.toURI().getPath()); //こちらはtoURI()がなくても例外は発生しないが、空白文字を扱えてはおらず fieldFilePath.setText(file.getPath()); //ファイルを見つけられない(Fileは対象がなくてもエラーにならない) /* if(file.exists()){ JOptionPane.showMessageDialog(this,"jarファイルを確認できました","確認",JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(this,"jarを見つけられませんでした","エラー",JOptionPane.ERROR_MESSAGE); } */ // //jarのJarFileの名前 JarFile jarFile=new JarFile(jarURL.toURI().getPath()); //toURI()がないとパスの空白文字を扱えず、ファイルが無い例外が発生する fieldJarPath.setText(jarFile.getName()); //(JarFileは対象がないとエラーになる) }catch(Exception ex){ JOptionPane.showMessageDialog(this,ex.toString(),"エラー",JOptionPane.ERROR_MESSAGE); } }else if(object==buttonReset){ fieldClassName.setText(""); fieldClassURL.setText(""); fieldJarURL.setText(""); fieldFilePath.setText(""); fieldJarPath.setText(""); } } }