好的,所以我有一个程序,你可以上传房子的图像出租,然后将图像复制到所有图像所在的目录。然后在另一个窗口中,它将所有图像加载到我可以单击的演示文稿中。在编译和运行Sublime Text时,这非常正常。但是在创建.jar文件并运行它之后,存在一些问题。我可以上传一个图像并将其复制到图像目录中,但当我转到另一个JFrame窗口时,应该显示所有图像,它会锁定程序并且必须通过任务管理器关闭。有什么建议?
这是启动程序时的代码,其中一些房屋的库存图像被加载到主图像目录中,用于所有房屋图像:
public void copyStockImages(String filename)
{
String filepath = "Images/Testimages/" + filename;
BufferedImage image = null;
try {
image = ImageIO.read(getClass().getResource(filepath));
}
catch( FileNotFoundException fnfe ){
System.out.println( "File not found: " + filepath );
}
catch( IOException ioe ){
System.out.println( "Error reading image" );
}
String newFilePath = "Images/houseImages/" + filename;
File fileOut = new File( newFilePath );
if( fileOut.exists() ){
return;
}
try{
ImageIO.write( image, "jpg", fileOut );
}
catch( IOException ioe ){
System.out.println( "Error reading image" );
}
}
上传图片:
private void uploadImages(HouseForRent house) {
if(filepaths.isEmpty()) {
return;
}
Iterator<String> iter = filepaths.iterator();
while( iter.hasNext() ) {
String filepath = i.next();
String filetype = findFiletype( filepath );
BufferedImage image = null;
try {
image = ImageIO.read( new File( filepath ) );
}
catch( FileNotFoundException fnfe ) {
dialog( "Cannon find file: " + filepath );
}
catch( IOException ioe ) {
dialog( "Error reading file" );
}
catch(NullPointerException npe) {
}
try {
saveImage( image, filetype, house );
}
catch( IOException ioe ) {
dialog( "Error reading from file: " + ioe.toString() );
}
catch( NullPointerException npe ) {
dialog( "Error: " + npe.toString() );
}
}
}
将图像复制到目录:
private void saveImage( BufferedImage image, String filetype, HouseForRent house ) throws IOException{
String newFilePath = "Images/houseImages/";
String filelink = newFilepath + filetype;
File fileOut = new File( filelink );
if( fileOut.exists() ) {
house.addImage(filelink);
return;
}
try {
ImageIO.write( image, "jpg", fileOut );
}
catch( Exception e ) {
dialog( "Error reading image" );
}
house.addImage(filelink);
imageLinks.add( filelink );
}
然后我有这个很长的Image类,我在PasteBin上发布了代码:
答案 0 :(得分:2)
1)我怀疑这是你问题的根源:getClass().getResource(filepath)
。
String filepath = "Images/Testimages/" + filename;
将成为硬盘驱动器上的路径。但是,当您从.jar执行时,它将尝试在.jar文件中打开文件。
2)catch( IOException ioe ) {
dialog( "Error reading file" );
是次优的&#34;。保留至少错误消息(ioe.getMessage())总是一个好主意。如果不在您的用户对话框中,那么可能在某个日志中。
3)catch(NullPointerException npe) {
}
是非常糟糕的主意。你真的不应该像这样压制NullPointerException。一般来说,你应该处理它。
... IMHO
答案 1 :(得分:0)
如果您没有抛出任何异常,并且您的应用程序涉及使用Swing的GUI,则可能是因为并发。
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html
阅读本文。