因此标题几乎涵盖了它。
我终于让我的程序生成.java和.class文件并执行其他可运行的.jar文件。
我终于让我的程序将.java和.class文件输出为.jar文件。现在虽然当我尝试运行runnable .jar文件时没有任何反应。
因此,我非常接近完成项目的这一部分,转到下一部分,指出我的代码出错了。
我认为这条线非常庞大:
ProcessBuilder javaCompiler = new ProcessBuilder("jar", "-cvfm", "BasicGUI" + buffer + ".jar", "C:/Users/Powermaniac/workspace/GUI program/MANIFEST 1." + buffer + extension2, "C:/Users/Powermaniac/workspace/GUI program/bin/test/" + "*.class");
以下是代码:
package test;
import java.awt.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.*;
public class BasicGUI {
public static void main(String[] args) throws IOException, InterruptedException {
{
BufferedReader br;
BufferedWriter bw;
String fname = "BasicGUI.jar";
String extension = ".java";
String extension2 = ".MF";
String buffer = "1";
for (int h = 1; h <= 1; h++) {
buffer = "" + h;
String fileName = "BasicGUI";
fileName = fileName + buffer + extension;
System.out.println(fileName);
try {
bw = new BufferedWriter(new FileWriter(fileName));
}
catch (IOException e) {
System.out.println("Cannot open " + fileName + "!");
return;
}
try{
final String NL = System.getProperty("line.separator");
bw.write("public class BasicGUI" + buffer + "{" + NL
+ "\tpublic static void main(String[] args) {" + NL
+ "\t\tSystem.out.println(\"hello world\");" + NL
+ "\t}" + NL
+ "}" + NL);
bw.close();
br = new BufferedReader(new FileReader(fileName));
}
catch (FileNotFoundException e) {
System.out.println(fname + " not found!");
return;
}
String line;
while( (line = br.readLine()) != null) {
System.out.println(line);
}
}
for (int h = 1; h <= 1; h++) {
buffer = "" + h;
String fileName = "MANIFEST 1.";
fileName = fileName + buffer + extension2;
System.out.println(fileName);
try {
bw = new BufferedWriter(new FileWriter(fileName));
}
catch (IOException e) {
System.out.println("Cannot open " + fileName + "!");
return;
}
try{
final String NL = System.getProperty("line.separator");
bw.write("Manifest-Version: 1." + buffer + NL
+ "Created-By: 1.6.0 (Sun Microsystems Inc.)" + NL
+ "Class-Path: C:/Users/Powermaniac/workspace/GUI program/bin/test" + NL
+ "MainClass: BasicGUI" + buffer + NL);
bw.close();
br = new BufferedReader(new FileReader(fileName));
}
catch (FileNotFoundException e) {
System.out.println(fname + " not found!");
return;
}
String line;
while( (line = br.readLine()) != null) {
System.out.println(line);
}
}
HelloWorldDisplay displayPanel = new HelloWorldDisplay();
JButton okButton = new JButton("OK");
ButtonHandler listener = new ButtonHandler();
okButton.addActionListener(listener);
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
content.add(displayPanel, BorderLayout.CENTER);
content.add(okButton, BorderLayout.SOUTH);
JFrame window = new JFrame("GUI Test");
window.setContentPane(content);
window.setSize(250,100);
window.setLocation(100,100);
window.setVisible(true);
ProcessBuilder javaCompiler = new ProcessBuilder("jar", "-cvfm", "BasicGUI" + buffer + ".jar", "C:/Users/Powermaniac/workspace/GUI program/MANIFEST 1." + buffer + extension2, "C:/Users/Powermaniac/workspace/GUI program/bin/test/" + "*.class");
javaCompiler.redirectErrorStream(true);
Process p = javaCompiler.start();
p.waitFor();
InputStream inp=p.getInputStream();
int no=inp.read();
while(no!=-1)
{
System.out.print((char)no);
no=inp.read();
}
}
}
}
答案 0 :(得分:0)
您必须了解的一件事是JVM执行从源文件生成的类文件。因此,我永远不会期望执行如下编码:
bw.write("public class BasicGUI" + buffer + "{" + NL
+ "\tpublic static void main(String[] args) {" + NL
+ "\t\tSystem.out.println(\"hello world\");" + NL
+ "\t}" + NL
+ "}" + NL);
检查jar command usage并尝试以正确的方式创建jar
答案 1 :(得分:0)
我基本上是想制作一个制作程序的程序。
那么在这种情况下,您最好生成一个Ant build.xml
文件,然后将Ant作为外部进程运行,或者在当前JVM中调用它。 Ant知道如何运行Java编译器和创建JAR文件。
以下是关于如何操作的Q&amp; A:Run ant from Java