实例化在运行时创建的类

时间:2018-11-17 18:21:26

标签: java eclipse swing class runtime

我在下面创建了执行以下操作的演示:


  1. 用户在提供的JTextArea中编写他们的课程。
  2. 单击实例化类JButton以创建与用户创建的类有关的Java文件。
  3. 单击运行JButton,以实际使用创建的类(带注释的代码)。

我不知道这是否是运行运行时创建的类的最佳方法(创建Java文件)。但是,在我的实际项目中,我确实需要在.java文件中创建这些类。

我了解Eclipse不允许注释的部分,因为在编译时,编译器不知道myClass是什么。我该怎么办?

代码:

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setLayout(new GridLayout(1,3));

        JTextArea editor = new JTextArea();
        editor.setPreferredSize(new Dimension(400,400));
        editor.setTabSize(4);
        editor.setText("public class myClass {\n" + 
                "\tpublic int myValue;\n" + 
                "\t\n" + 
                "\tpublic myClass(int value){\n" + 
                "\t\tmyValue = value;\n" + 
                "\t}\n" + 
                "\t\n" + 
                "\tpublic int getValue() {\n" + 
                "\treturn myValue;\n" + 
                "\t}\n" + 
                "}");

        JButton instantiate = new JButton("Instantiate class");
        JButton run = new JButton("Run");

        frame.getContentPane().add(editor);
        frame.getContentPane().add(instantiate);
        frame.getContentPane().add(run);
        frame.pack();
        frame.setVisible(true);

        instantiate.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) { 
                try {
                    PrintWriter out = new PrintWriter("src/myClass.java");
                    out.println(editor.getText());
                    out.close();
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
            } 
        });

        run.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) { 
                //This is what I want to do

                //myClass myObject = new myClass(4);
                //System.out.println("My value is: " + myObject.getValue());
            } 
        });

    }

}

0 个答案:

没有答案