我是新手,对java有点新意。 我遇到了一个问题。 我有一个非常简单的程序,试图创建png并将其保存在用户选择的文件夹中。 byteimage是一个私有字节[]:
byteimage = bcd.createPNG(300, 140, ColorSpace.TYPE_RGB, Color.BLACK, Color.BLACK);
在浏览按钮
的动作侦听器内调用setPath()private void setPath() {
JFileChooser pathchooser = new JFileChooser();
pathchooser.setMultiSelectionEnabled(false);
pathchooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
pathchooser.setApproveButtonMnemonic(KeyEvent.VK_ENTER);
pathchooser.showDialog(this, "OK");
File f = pathchooser.getSelectedFile();
if (f != null) {
filepath = f.getAbsolutePath();
pathfield.setText(filepath);
}
}
字节到png方法看起来像这样:
public void byteToPNG(String filename) {
try {
InputStream in = new ByteArrayInputStream(byteimage);
BufferedImage bufferedimg = ImageIO.read(in);
ImageIO.write(bufferedimg, "png", new File(filename));
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
此方法的调用如下:
byteToPNG(pathfield.getText() + System.getProperty("file.separator") + textfield.getText() + ".png");
textfield.getText()设置png的实际名称。 在构造函数内部,设置了默认文件路径:
filepath = System.getProperty("user.dir");
pathfield.setText(filepath);
代码在Eclipse中运行良好,它在所需位置生成一个png图像。 不幸的是,在导出为jar之后,它会启动,但是当按下用于生成png的按钮时,没有任何反应。我在想InputStream或BufferedImage有问题,但我有点不解。
答案 0 :(得分:0)
如果传递给byteToPNG的String fileName不是绝对的(即以“C:/ foo / bar / etc”形式写入),这可能是破坏jar的原因。您还可以尝试使用以下命令在终端中运行jar文件: java -jar myJarFile.jar。 这将导致控制台窗口在运行的jar应用程序旁边保持打开状态,其中将打印所有应用程序输出(包括任何异常)。