PDA

View Full Version : سوال: نمايش عكس از روي سايت



ravand
جمعه 12 خرداد 1391, 20:04 عصر
سلام.
من ميخوام يك عكس رو از روي سايت بخونم و روي يك فرم در يك پنجره به نمايش بذارم.
مثلا ادرس زير:

http://site/images/118.gif
من عكس بالا رو توي يه پنجره نشون بدم و بعد وقتي اين عكس رو در اين ادرس تغيير دادم توي برنامه اي كه در جاوا نوشتم هم عكس تغيير كنه. يعني وقتي برنامه رو كه با جاوا نوشتم.بستم و دوباره باز كردم عكس هم تغيير كنه.
متشكرم.

spiderman200700
جمعه 12 خرداد 1391, 20:58 عصر
سلام.
باید هر دفعه عکس رو از اون آدرس دانلود کنی و توی یه آرایه ی byte ذخیره کنی.
بعد از اون آرایه یه ImageIcon بسازی و نمایشش بدی.

saban56
جمعه 12 خرداد 1391, 21:05 عصر
با این روش هم میشه:

URL url = new URL("http://address.com/image.png");
Image image = ImageIO.read(url);

بعد هم image رو میتونی به ImageIcon تبدیل کنی.

spiderman200700
جمعه 12 خرداد 1391, 21:57 عصر
با این روش هم میشه:
URL url = new URL("http://mihandownload.com/mypic/Hamidreza/sinbad.jpg");
ImageIcon im=new ImageIcon(url);

ravand
جمعه 12 خرداد 1391, 22:08 عصر
به اين شكل عمل كردم خطا داد:
package po;
import java.awt.*;
import javax.swing.*;
public class TestDB extends JFrame {
public TestDB(){
super("test be on a frame");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
JLabel imgLabel=new JLabel(url);

getContentPane().add(imgLabel);
setVisible(true);
}
public static void main(String args[]){
new TestDB();
}
}
فكر ميكنم كتابخانه ي مختصص اين كار رو استفاده نكردم.
خطايي كه داد اين بود:

init:
deps-jar:
Compiling 1 source file to F:\jdk\bin\po\build\classes
F:\jdk\bin\po\src\po\TestDB.java:9: cannot find symbol
symbol : class URL
location: class po.TestDB
URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
F:\jdk\bin\po\src\po\TestDB.java:9: cannot find symbol
symbol : class URL
location: class po.TestDB
URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
2 errors
BUILD FAILED (total time: 0 seconds)

متشكرم.

saban56
جمعه 12 خرداد 1391, 22:54 عصر
این خطا به خاطر اینه که کلاس URL رو import نکردید: java.net.URL
اما یه اشتباه دیگه هم در کدتون هست، url رو مستقیم به JLabel نباید بدید، url رو باید به ImageIcon بدید تا عکس رو از اون آدرس بگیره و بعد ImageIcon به JLabel بدید.

URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
ImageIcon icon = new ImageIcon(url);
JLabel imgLabel = new JLabel(icon);

URL اکسپشن MalformedURLException رو هم throw میکنه که باید هندل کنید.

ravand
شنبه 13 خرداد 1391, 07:51 صبح
به اين صورت درآوردمش خطا داد:
package po;
import java.awt.*;
import javax.swing.*;
import java.net.URL;
public class TestDB extends JFrame {
public TestDB(){
super("test be on a frame");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
ImageIcon icon = new ImageIcon(url);
JLabel imgLabel = new JLabel(icon);

getContentPane().add(imgLabel);
setVisible(true);
}
public static void main(String args[]){
new TestDB();
}
}
خطا:

init:
deps-jar:
Compiling 1 source file to F:\jdk\bin\po\build\classes
F:\jdk\bin\po\src\po\TestDB.java:10: unreported exception java.net.MalformedURLException; must be caught or declared to be thrown
URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
1 error
BUILD FAILED (total time: 0 seconds)



URL اکسپشن MalformedURLException رو هم throw میکنه که باید هندل کنید.
نميدونم چجوري بايد اين كار رو بكنم و اصلا نميدونم اين خط براي چي هست ميشه توضيح بديد؟
متشكرم.

saban56
شنبه 13 خرداد 1391, 10:08 صبح
Constructor ِ کلاس URL اکسپشن MalformedURLException رو پرت میکنه بنابراین هر موقع از URL در متدی استفاده می کنیم اون متد باید MalformedURLException رو throws کنه یا با try-catch اون اکسپشن رو هندل کنیم:

public TestDB() throws MalformedURLException

و چون در متد main هم constructor کلاس TestDB صدا شده ، این متد هم باید اکسپشن رو throws کنه یا در try-catch قرار بده

public static void main(String args[]) throws MalformedURLException


این روش هم با try-catch هست که دیگه نیاز به throws نداره:

URL url;
try {
url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
} catch (MalformedURLException ex) {
System.out.println("Bad URL!");
}


MalformedURLException زمانی رخ میده که URL ناقص وارد شده باشه یا فرمت درستی نداشته باشه ...
مثلا اگر http رو در ابتدای آدرس عکس قرار ندید، (barnamenevis.org/images/smilies/yahoo/118.gif) ، این اکسپشن پرت می شود.

ravand
شنبه 13 خرداد 1391, 22:00 عصر
يعني كل كدهاي من اينطوري ميشه؟
package po;
import java.awt.*;
import javax.swing.*;
import java.net.URL;
public class TestDB extends JFrame {
public TestDB(){
super("test be on a frame");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
URL url;
try {
url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
} catch (MalformedURLException ex) {
System.out.println("Bad URL!");
}
ImageIcon icon = new ImageIcon(url);
JLabel imgLabel = new JLabel(icon);

getContentPane().add(imgLabel);
setVisible(true);
}
public static void main(String args[]){
new TestDB();
}
}
كدهاي بالا كار نكرد. نميدونم چطوري بايد از روش شما استفاده كنم.
چون خيلي مبتدي هستم.
متسكرم

saban56
شنبه 13 خرداد 1391, 22:08 عصر
package po;

import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestDB extends JFrame {

public TestDB() {
super("test be on a frame");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
URL url = null;
try {
url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
} catch (MalformedURLException ex) {
System.out.println("Bad URL!");
}
ImageIcon icon = new ImageIcon(url);
JLabel imgLabel = new JLabel(icon);

getContentPane().add(imgLabel);
setVisible(true);
}

public static void main(String args[]) {
new TestDB();
}
}

این کد رو امتحان کنید مشکلی نداره باید کار کنه.

ravand
شنبه 13 خرداد 1391, 22:39 عصر
متشكرم . برنامه كار كرد.
ولي يه ايرادي داره . اينكه وقتي من آدرس عكس رو توي آدرس مورد نظر تغيير ميدم و يه عكس ديگه جاش ميذارم. بعد ميام برنامه رو دوباره اجرا ميكنم . بازم ميبينم عكس قبلي نشون داده ميشه. و وقتي ادرس عكس رو توي مرورگر ميزنم و بعد اين برنامه رو اجرا ميكنم مي بينم عكس جديد كه گذاشتم حالا نشون داده ميشه.
فكر كنم داره كش ميشه. ولي نميدونم چجوري مشكل رو حل كنم.
متشكرم.

saban56
شنبه 13 خرداد 1391, 23:25 عصر
این کد رو تست کن ببین مشکلت برطرف میشه؟

package po;

import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import sun.awt.image.URLImageSource;

public class TestDB extends JFrame {

public TestDB() throws MalformedURLException, IOException{
super("test be on a frame");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);

URL url = new URL("http://barnamenevis.org/images/smilies/yahoo/118.gif");
URLConnection con = url.openConnection();
con.setUseCaches(false);

Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url, con));
ImageIcon icon = new ImageIcon(img);

JLabel imgLabel = new JLabel(icon);
getContentPane().add(imgLabel);
setVisible(true);
}

public static void main(String args[]) throws MalformedURLException, IOException{
new TestDB();
}
}

ravand
یک شنبه 14 خرداد 1391, 08:17 صبح
برنامه اجرا شد و پنجره هم بازشد و عكس هم نشون داده شد ولي اين اخطار رو بهم داد:

init:
deps-jar:
Compiling 1 source file to F:\jdk\bin\po\build\classes
F:\jdk\bin\po\src\po\TestDB.java:12: warning: sun.awt.image.URLImageSource is Sun proprietary API and may be removed in a future release
import sun.awt.image.URLImageSource;
F:\jdk\bin\po\src\po\TestDB.java:25: warning: sun.awt.image.URLImageSource is Sun proprietary API and may be removed in a future release
Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url, con));
2 warnings
compile:
run:
BUILD SUCCESSFUL (total time: 6 seconds)

دليلش چيه؟

saban56
یک شنبه 14 خرداد 1391, 12:35 عصر
کلاس URLImageSource جزو پکیج sun هست که توصیه شده که ازش استفاده نشه!
دلیلش هم اینجا توضیح داده: Why Developers Should Not Write Programs That Call 'sun' Packages (http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html)
به جای اون خطی که از URLImageSource استفاده شده اینو بنویس:
Image img = Toolkit.getDefaultToolkit().createImage((ImageProd ucer) con.getContent());

ImageProducer رو هم import کن

import java.awt.image.ImageProducer;