如何运行/在运行时从JTextArea中编译Java代码?
-
22-09-2019 - |
题
我有一个的JInternalFrame绘有一个BufferedImage和包含在JFrame的的JDesktopPane。我也有对当前的JInternalFrame的画BufferedImage,作为输入,并在此输入它是油漆JInternalFrame的新操作的图片再次返回另一个操纵的BufferedImage做一些操作后一个JTextArea,我想写一些Java代码(功能)。
<强> JTextArea中的操纵java代码强>: -
public BufferedImage customOperation(BufferedImage CurrentInputImg)
{
Color colOld;
Color colNew;
BufferedImage manipulated=new BufferedImage(CurrentInputImg.getWidth(),CurrentInputImg.getHeight(),BufferedImage.TYPE_INT_ARGB);
// make all Red pixels of current image black
for(int i=0;i< CurrentInputImg.getWidth();i++) {
for(int j=0;j< CurrentInputImg.getHeight(),j++) {
colOld=new Color(CurrentInputImg.getRGB(i,j));
colNew=new Color(0,colOld.getGreen(),colOld.getBlue(),colOld.getAlpha());
manipulated.setRGB(i,j,colNew.getRGB());
}
}
return manipulated;
}
我如何运行/编译在运行此JTextArea的Java代码,并得到一个新的 操纵图像上画的JInternalFrame?
这是我的主要类:
(这个类是不实际的人,但我已经创造了它为你的基本接口包含的JTextArea,是JInternalFrame,应用按钮)的
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JInternalFrame;
import javax.swing.JDesktopPane;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.io.File;
import java.util.*;
class MyCustomOperationSystem extends JFrame
{
public JInternalFrame ImageFrame;
public BufferedImage CurrenFrameImage;
public MyCustomOperationSystem() {
setTitle("My Custom Image Operations");
setSize((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());
JDesktopPane desktop=new JDesktopPane();
desktop.setPreferredSize(new Dimension((int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(),(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()));
try {
CurrenFrameImage=ImageIO.read(new File("c:/Lokesh.png"));
}catch(Exception exp) {
System.out.println("Error in Loading Image");
}
ImageFrame=new JInternalFrame("Image Frame",true,true,false,true);
ImageFrame.setMinimumSize(new Dimension(CurrenFrameImage.getWidth()+10,CurrenFrameImage.getHeight()+10));
ImageFrame.getContentPane().add(CreateImagePanel());
ImageFrame.setLayer(1);
ImageFrame.setLocation(100,100);
ImageFrame.setVisible(true);
desktop.setOpaque(true);
desktop.setBackground(Color.darkGray);
desktop.add(ImageFrame);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add("Center",desktop);
this.getContentPane().add("South",ControlPanel());
pack();
setVisible(true);
}
public JPanel CreateImagePanel() {
JPanel tempPanel=new JPanel() {
public void paintComponent(Graphics g) {
g.drawImage(CurrenFrameImage,0,0,this);
}
};
tempPanel.setPreferredSize(new Dimension(CurrenFrameImage.getWidth(),CurrenFrameImage.getHeight()));
return tempPanel;
}
public JPanel ControlPanel() {
JPanel controlPan=new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton customOP=new JButton("Custom Operation");
customOP.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evnt) {
JFrame CodeFrame=new JFrame("Write your Code Here");
JTextArea codeArea=new JTextArea("Your Java Code Here",100,70);
JScrollPane codeScrollPan=new JScrollPane(codeArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
CodeFrame.add(codeScrollPan);
CodeFrame.setVisible(true);
}
});
JButton Apply=new JButton("Apply Code");
Apply.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
// What should I do!!! Here!!!!!!!!!!!!!!!
}
});
controlPan.add(customOP);
controlPan.add(Apply);
return controlPan;
}
public static void main(String s[]) {
new MyCustomOperationSystem();
}
}
注意:在上述类的JInternalFrame(IMAGEFRAME)是即使我已经宣布它可见不可见。因此,IMAGEFRAME同时编译和运行上面的类是不可见的。你必须在运行之前,以确定这个问题。
解决方案
看一看的的Java编译器6 API
其他提示
如果您从Java中要实际编译代码,它是可行的,但不是小事。
这是更好的使用如Groovy脚本框架 - 这将工作的伟大。 Groovy是非常兼容Java的,它几乎总是直接运行Java代码(也有少数例外怪)
BeanShell的是另一个脚本框架。
这些都做你想要的东西,而没有试图找出如何编译类,然后将其加载到您现有的运行系统的努力。 (其实,我已经看到了这个问题不是初始编译,它的冲洗你的类,因此您可以使用编辑后,一个新的更换)。
不隶属于 StackOverflow