edit "second version"
我使用ANTLR构建Java swing以获取源代码树。为了获得从ANTLR构建的树图像,我使用的是GRAPHVIZ,http://www.graphviz.org/。
因此,Graphviz将写入扩展名为.dot的文件,然后我将其加载到我的Swing应用程序中。我的代码就像这样
String OS = System.getProperty("os.name");
Runtime rt = Runtime.getRuntime();
BufferedWriter bw = null;
File tempDir = new File(System.getProperty("java.io.tmpdir"));
File tempInput;
try {
tempInput = File.createTempFile("output", ".dot", tempDir);
File tempOutput = File.createTempFile("tree", ".png", tempDir);
if (OS.equals("Linux")) {
try {
bw = new BufferedWriter(new FileWriter(tempInput.getAbsoluteFile()));
bw.write(st2);
bw.close();
Process pr = rt.exec("dot -Tpng /tmp/output.dot -o "
+ "/tmp/tree.png");
} catch (IOException ex) {
System.out.println("failed to write the image file");
}
} else {
try {
bw = new BufferedWriter(new FileWriter(tempInput.getAbsoluteFile()));
bw.write(st2);
bw.close();
String dotPath = "C:\\Program Files (x86)\\Graphviz2.38\\bin\\dot.exe";
String fileInputPath = tempInput.toString();
String fileOutputPath = tempOutput.toString();
String tParam = "-Tpng";
String tOParam = "-o";
String[] cmd = new String[5];
cmd[0] = dotPath;
cmd[1] = tParam;
cmd[2] = fileInputPath;
cmd[3] = tOParam;
cmd[4] = fileOutputPath;
rt.exec(cmd);
} catch (IOException ex) {
System.out.println("Failed to write to file");
} finally {
}
}
} catch (IOException ex) {
Logger.getLogger(MainAlgoritma.class.getName()).log(Level.SEVERE, null, ex);
}
你知道,windows中的输出应该命名为tree.png。但窗户不能给我这个名字。名称是动态变化的 tree2593490478729479216.png,有时候像tree9133268802668231475.png等。
我的问题是:
如何在读取图像并将其加载到app?
后删除处理后的图像修改
现在,如何阅读该图像,然后将其加载到应用程序......? 我再次上课加载图像,但你知道,我仍然感到困惑。
private BufferedImage image;
String tmpfolder = System.getProperty("java.io.tmpdir");
public FileImage() {
if (OS.equals("Linux")) {
try {
image = ImageIO.read(new File(tmpfolder+"/tree.png"));
} catch (IOException ex) {
System.out.println("Image failed to load..!!! ");
}
} else {
try {
image = ImageIO.read(new File(tmpfolder+"\\tree.png"));
} catch (IOException ex) {
System.out.println("Image failed to load...!!! ");
}
}
JLabel jLabel = new JLabel(new ImageIcon(image));
jPanel3.add(jLabel);
}
答案 0 :(得分:1)
您可以使用相对路径或在Swing中使用JFileChooser
来打开文件选择器,让用户选择输入和/或输出文件。
答案 1 :(得分:0)
如何获得名称只是tree.png
您应该阅读正在使用的createTempFile
方法的javadoc。它清楚地表明您作为参数传入的字符串是前缀和后缀。
如果您更换
File.createTempFile("output", ".dot", tempDir);
通过
tempInput = new File( tempDir, "output.dot" );
tempInput.createNewFile();
它应该有用。
注意我是如何使用带有两个参数的File
构造函数的。这可以避免您正在使用的操作系统上出现丑陋的switch语句。