JFileChooser.APPROVE_OPTION from a tabbedPane
Hello all,
A simple yet frustrating problem. I need to have certain actions run when the open button on the JFileChooser is clicked. All very simple if the chooser is created as a dialig box with
int returnVal=fc.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION)
etc etc.
However this will not work for a JFileChooser placed permentantly on a JTabbedPane. Does anyone know how else i can utilise the OPEN button when the fileChooser is not a dialog?
Any help would be much appreciated.
Maybe you can get some ideas from this:
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
public class FileChooserTest
public static void main(String[] args)
final JFileChooser fileChooser = new JFileChooser(".");
fileChooser.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent e)
String s = e.toString();
int start = s.indexOf("returnValue=");
int end = s.substring(start).indexOf(",");
String retVal = s.substring(start + 12, start + end);
System.out.println("retVal = " + retVal);
if(retVal.equals("APPROVE_OPTION"))
System.out.println("selectedFile = " + fileChooser.getSelectedFile());
else
System.out.println("s = " + s);
if(s.indexOf("APPROVE_OPTION") != -1)
System.out.println("APPROVE_OPTION");
fileChooser.addPropertyChangeListener(new PropertyChangeListener()
public void propertyChange(PropertyChangeEvent e)
System.out.println(e.getPropertyName());
JPanel panel = new JPanel();
panel.add(fileChooser);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(panel);
f.pack();
f.setLocation(200,200);
f.setVisible(true);
}
Similar Messages
-
Applet with JFilechooser called from a Javascript blocks paint messages
Hi,
I am trying to create an applet that can:
1) be called from a Javascript
2) displays a file selection dialog for multi-selecting files
3) returns the selected filenames in a string to the JavaScript
I am able to use doPrivileged to apply the necessary security context to launch a JFilechooser and return the filenames selected. However, When the JFilechooser dialog is visible and the user moves the dialog window around the HTML pages dose not receive any repaint messages. They seem to be blocked by the thread that launched the JFilechooser dialog and is probably blocking update events as the dialog is still visible.
I know I need some type of a message pump so the child thread can inform the parent thread and the browser to repaint. However, I don't know how to do this.
Please help.
------Applet Code Begin:-----
import java.awt.Color;
import java.awt.Graphics;
import java.awt.AWTEvent;
import java.awt.event.AWTEventListener.*;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Vector;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class SampleApplet extends JApplet
boolean allowDirs=false;
boolean allowFiles=true;
boolean hidden=false;
File lastUserDir=null;
public void init()
public void start()
public void stop()
public String selectFiles()
String choosenFiles = null;
choosenFiles = new String((String)java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction()
public Object run()
String choosenFiles=new String();
JFilechooser fc = new JFilechooser();
fc.setFileSelectionMode(allowDirs ? (allowFiles ? JFileChooser.FILES_AND_DIRECTORIES
: JFileChooser.DIRECTORIES_ONLY)
: JFileChooser.FILES_ONLY);
fc.setMultiSelectionEnabled(true);
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION)
choosenFiles = "The selected filesnames will be stuffed here";
return choosenFiles; //return whatever you want
return choosenFiles;
------Applet Code End:-----
------Html Code Begin:-----
<html>
<applet id="SampleApplet" archive="SampleApplet.jar"; code="SampleApplet.class"; width="2" height="2" codebase=".">
</applet>
<head>
<title>Untitled Page</title>
<script language="javascript" type="text/javascript">
function SelectFiles_onclick()
var s = (document.applets[0].selectFiles());
alert(s);
</script>
</head>
<body>
Click Test button to select files
<input id="SelectFiles" type="button" value="Select Files" onclick="return SelectFiles_onclick()" />
</body>
</html>
------Html Code End:-----try this:
first don't open the file dialog in the SelectFiles call. Start a new thread that does that. Then return from the SelectFiles call immediately. Now after the user selectes the files call back into the javascript by doing something like this:
pass the list of files into this function, each on being a String in the params array
public synchronized void sendDataToUI(Object[] params) {
if (FuserState.hasQuit()) {
return;
String function = "getUpdates";
if (logger.isLoggable(Level.FINE)) {
logger.log(Level.FINE, "Calling Javascript function " + function);
if (getJavaScriptWindow() == null) {
logger.log(Level.SEVERE, "Member javascriptWindow is NULL, no call was made!");
return;
try {
getJavaScriptWindow().call(function, params);
catch (netscape.javascript.JSException x) {
if (params == null) {
logger.log(Level.SEVERE, "p=NULL PARAM");
} else {
logger.log(Level.SEVERE, "p=" + params[0]);
protected JSObject getJavaScriptWindow() {
javascriptWindow = JSObject.getWindow(this);
} -
It appears whenever a modal window is opened on Linux X-Windows the focus is stolen from the window and you CANNOT use the keyboard to return to the form - let alone set the focus on the textbox.
This is not just for my modal forms but for something as fundamental as JOptionPane or simple code like this:
JFileChooser chooser = new JFileChooser();
if (chooser.showOpenDialog(parentComponent) == JFileChooser.APPROVE_OPTION) {
From trolling through posts I can see no answers which is really sad for Linux good for Microsoft I guess. How can we deploy on Linux if you are forced to get carpal tunnel clicking on every form with the mouse ?
I would be willing to pay some consulting dollars to get this resolved.
GregHm, I've developed quite a bit for X11 and linux, but I never noticed that effect. Can you post a SSCCE that reproduces the issue, just to be sure it is not a side-effect from your code?
It this is a persistent problem, you might want to make your dialog re-request the focus programmatically:
myDialog.setVisible(true);
SwingUtilities.invokeLater(new Runnable() {
public void run(){
myDialog.requestFocus();
}See if this does anything. If not, the problem is most likely not coming from swing. -
Adding files from JFileChooser to Jlists
i have created a JList i am wondering how i can add files to this Jlist using a JFile chooser.
i need to add the actual file with the path and everything i also need to add the contents of a directory into the jList if selected in the Filechooser.
i have no problem creating a JFilechooser dialog.
please help me out.Hi,
I gave an example how to use the filechosser and filefilter [url http://forum.java.sun.com/thread.jsp?forum=57&thread=435432]here.
I think its also where you got the source code above.
Compactly and performable:import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
class Player2 extends JFrame
public static final int DELAY = 10;
JButton playButton;
private JButton Shuffle;
private JButton stopButton;
Timer playTimer;
private JLabel aMessage;
private JButton openButton;
JList playList = null;
JPanel aPanel;
JFileChooser theFileChooser = new JFileChooser();
AudioFileFilter filter = new AudioFileFilter();
JFrame win = new JFrame("AudioPlayer");
class playTimerListener extends AbstractAction
public void actionPerformed(ActionEvent e)
//myPlayer.play();
class OpenFileChooserAction extends AbstractAction
public void actionPerformed(ActionEvent e)
int retVal = theFileChooser.showOpenDialog(aPanel);
if (retVal == JFileChooser.APPROVE_OPTION)
File[] files = theFileChooser.getSelectedFiles();
DefaultListModel model = (DefaultListModel) playList.getModel();
model.clear();
for (int i = 0; i < files.length; i++)
if (files.isDirectory())
String[] filesInDirectory = files[i].list();
for (int ii = 0; ii < filesInDirectory.length; ii++)
File f = new File(files[i].getPath() + "/" + filesInDirectory[ii]);
//to prevent subdirectories to be added to the list
if (f.isFile() && filter.accept(f))
model.addElement(filesInDirectory[ii]);
else
if (filter.accept(files[i]))
model.addElement(files[i]);
class playButtonActionListener extends AbstractAction
public void actionPerformed(ActionEvent e)
System.out.println("Playing...");
playTimer.start();
class stopButtonActionListener extends AbstractAction
public void actionPerformed(ActionEvent e)
System.out.println("Stopped!");
playTimer.stop();
public Player2(String s)
super(s);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
playTimer = new Timer(DELAY, new playTimerListener());
theFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
theFileChooser.setMultiSelectionEnabled(true);
theFileChooser.setFileFilter(filter);
theFileChooser.setFileHidingEnabled(false);
makeMyGUI();
pack();
show();
private void makeMyGUI()
aMessage = new JLabel("Nothing selected yet", JLabel.CENTER);
JScrollPane listScroll = new JScrollPane(playList = new JList(new DefaultListModel()));
listScroll.setPreferredSize(new Dimension(200, 200));
playList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
playButton = new JButton(new playButtonActionListener());
playButton.setText("play...");
stopButton = new JButton(new stopButtonActionListener());
stopButton.setText("stop...");
openButton = new JButton(new OpenFileChooserAction());
openButton.setText("Open...");
openButton.setBackground(Color.yellow);
Shuffle = new JButton("Shuffle");
aPanel = new JPanel();
aPanel.setBackground(Color.blue);
aPanel.add(openButton);
aPanel.add(playButton);
aPanel.add(stopButton);
getContentPane().add(listScroll, "Center");
getContentPane().add(aPanel, "North");
getContentPane().add(aMessage, "South");
class AudioFileFilter extends FileFilter
public boolean accept(File f)
if (f.isDirectory())
return true;
String extension = Utils.getExtension(f);
if (extension != null)
if (extension.equals(Utils.wav)
|| extension.equals(Utils.aif)
|| extension.equals(Utils.rmf)
|| extension.equals(Utils.au)
|| extension.equals(Utils.mid))
return true;
else
return false;
return false;
public String getDescription()
return "wav, aif, rmf, au and mid";
public static void main(String[] args)
try
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
catch (Exception e)
e.printStackTrace();
new Player2("MP3 PLAYER");
class Utils
public final static String wav = "wav";
public final static String aif = "aif";
public final static String rmf = "rmf";
public final static String au = "au";
public final static String mid = "mid";
* Get the extension of a file.
public static String getExtension(File f)
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1)
ext = s.substring(i + 1).toLowerCase();
return ext;
//without formatting
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
class Player2 extends JFrame
public static final int DELAY = 10;
JButton playButton;
private JButton Shuffle;
private JButton stopButton;
Timer playTimer;
private JLabel aMessage;
private JButton openButton;
JList playList = null;
JPanel aPanel;
JFileChooser theFileChooser = new JFileChooser();
AudioFileFilter filter = new AudioFileFilter();
JFrame win = new JFrame("AudioPlayer");
class playTimerListener extends AbstractAction
public void actionPerformed(ActionEvent e)
//myPlayer.play();
class OpenFileChooserAction extends AbstractAction
public void actionPerformed(ActionEvent e)
int retVal = theFileChooser.showOpenDialog(aPanel);
if (retVal == JFileChooser.APPROVE_OPTION)
File[] files = theFileChooser.getSelectedFiles();
DefaultListModel model = (DefaultListModel) playList.getModel();
model.clear();
for (int i = 0; i < files.length; i++)
if (files[i].isDirectory())
String[] filesInDirectory = files[i].list();
for (int ii = 0; ii < filesInDirectory.length; ii++)
File f = new File(files[i].getPath() + "/" + filesInDirectory[ii]);
//to prevent subdirectories to be added to the list
if (f.isFile() && filter.accept(f))
model.addElement(filesInDirectory[ii]);
else
if (filter.accept(files[i]))
model.addElement(files[i]);
class playButtonActionListener extends AbstractAction
public void actionPerformed(ActionEvent e)
System.out.println("Playing...");
playTimer.start();
class stopButtonActionListener extends AbstractAction
public void actionPerformed(ActionEvent e)
System.out.println("Stopped!");
playTimer.stop();
public Player2(String s)
super(s);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
playTimer = new Timer(DELAY, new playTimerListener());
theFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
theFileChooser.setMultiSelectionEnabled(true);
theFileChooser.setFileFilter(filter);
theFileChooser.setFileHidingEnabled(false);
makeMyGUI();
pack();
show();
private void makeMyGUI()
aMessage = new JLabel("Nothing selected yet", JLabel.CENTER);
JScrollPane listScroll = new JScrollPane(playList = new JList(new DefaultListModel()));
listScroll.setPreferredSize(new Dimension(200, 200));
playList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
playButton = new JButton(new playButtonActionListener());
playButton.setText("play...");
stopButton = new JButton(new stopButtonActionListener());
stopButton.setText("stop...");
openButton = new JButton(new OpenFileChooserAction());
openButton.setText("Open...");
openButton.setBackground(Color.yellow);
Shuffle = new JButton("Shuffle");
aPanel = new JPanel();
aPanel.setBackground(Color.blue);
aPanel.add(openButton);
aPanel.add(playButton);
aPanel.add(stopButton);
getContentPane().add(listScroll, "Center");
getContentPane().add(aPanel, "North");
getContentPane().add(aMessage, "South");
class AudioFileFilter extends FileFilter
public boolean accept(File f)
if (f.isDirectory())
return true;
String extension = Utils.getExtension(f);
if (extension != null)
if (extension.equals(Utils.wav)
|| extension.equals(Utils.aif)
|| extension.equals(Utils.rmf)
|| extension.equals(Utils.au)
|| extension.equals(Utils.mid))
return true;
else
return false;
return false;
public String getDescription()
return "wav, aif, rmf, au and mid";
public static void main(String[] args)
try
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
catch (Exception e)
e.printStackTrace();
new Player2("MP3 PLAYER");
class Utils
public final static String wav = "wav";
public final static String aif = "aif";
public final static String rmf = "rmf";
public final static String au = "au";
public final static String mid = "mid";
* Get the extension of a file.
public static String getExtension(File f)
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1)
ext = s.substring(i + 1).toLowerCase();
return ext;
//Tim -
Problem with file and tabbedpanes
Hi
i am reading a file on my program .in that file i am written 4lines .but i want that from that file 2 lines on one tab and another two lines on another tab using tabbedpanes
Edited by: nirmala on Dec 26, 2007 7:26 AMi am written some code see this public void actionPerformed(ActionEvent e) {
// Handle open button action.
if (e.getSource() == browse) {
int returnVal = fc.showOpenDialog(NnsClient.this);
if (returnVal == JFileChooser.APPROVE_OPTION ) {
File file = fc.getSelectedFile();
// This is where a real application would open the file.
log.setText(file.getParent());
} else {
log.setText("Open command cancelled by user." + newline);
log.setCaretPosition(log.getDocument().getLength());
// Handle update button action.
} else if (e.getSource() == update) {
File file = fc.getSelectedFile();
String val = file.getAbsolutePath();
File file1 = new File (val);
try
RandomAccessFile ra = new RandomAccessFile(file1,"r");
//System.out.println(ra);
long last = ra.length();
System.out.println(last);
FileReader fis = new FileReader (file1);
//LineNumberReader lr = new LineNumberReader(fis);
//System.out.println(lr);
//lr.skip(last);
//int countRec = lr.getLineNumber()-1;
//System.out.println(countRec);
BufferedReader bis = new BufferedReader(fis);
StringBuffer sb = new StringBuffer();
String line = null;
while((line= bis.readLine())!=null)
//int i = line.length();
System.out.print(line.toString());
//System.out.println(line);
//sb.append(line);
System.out.println(sb.append(line));
sb.append("\n");
tf.setText(sb.toString());
ra.close();
fis.close();
//dis.close();
bis.close();
catch(FileNotFoundException e2)
e2.printStackTrace();
catch(IOException e1)
e1.printStackTrace();
}this is for action performed in this code only i want to develop that when i click on update i wanto get the file data on different tabs
JTabbedPane tp = new JTabbedPane();
JPanel pa = new JPanel();
pa.add(scroll);
//pa.add(ns.ta.setText(sb.toString()));
JPanel pb = new JPanel();
pb.add(tf);
t.setEditable(false);
//setPrefferedSize(new Dimension(30,40));
//tf.setText(sb.toString());
tp.addTab("tab1", pb);
tp.addTab("tab2",pa);
content.add(tp,BorderLayout.SOUTH);this code is for tabbedpanes on my program -
How to transfer file from server to client
I am making a server printer where all the system can take print out from the Printer installed on the server
i am not able to send file from the client to the Server. I am Attaching the code Please Help me it is my college project.
Server.java*
import java.io.*;
import java.lang.*;
import java.net.*;
import java.util.*;
import java.io.File;
class Server
static final int PORT = 26548; //Server Listening port
static String path;
public static void main(String args[])
System.out.println("Starting Server");
receive();
public static void receive()
while ( true )
try
//Create a socket
ServerSocket srvr = new ServerSocket(PORT);
Socket skt = srvr.accept();
String clientname= skt.getInetAddress().getHostAddress();
int clientport=skt.getPort();
long time = System.currentTimeMillis();
path= "C:\\Ankit Gupta\\Programs\\"+clientname+"\\"+time+" test.pdf";
System.out.println("File Recieved from : "+clientname+" : "+clientport);
//HttpServletRequest req;
//String remoteHost = req.getRemoteHost();
//String adr = getRemoteUser();
FileOutputStream fos = new FileOutputStream(path);
BufferedOutputStream out = new BufferedOutputStream(fos);
BufferedInputStream in = new BufferedInputStream( skt.getInputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Receiving data...");
while ((i = in.read()) != -1)
out.write(i);
out.flush();
in.close();
out.close();
skt.close();
srvr.close();
System.out.println("Transfer complete.");
printfile();
catch(Exception e)
System.out.print("Error! It didn't work! " + e + "\n");
try
Thread.sleep(1000);
catch (InterruptedException ie)
System.err.println("Interrupted");
} //end infinite while loop
public static void printfile()
delete();
public static void delete()
try
Thread.sleep(5000);
catch (InterruptedException ie)
System.err.println("Interrupted");
System.out.println("Deleting file");
File f = new File(path);
// Make sure the file or directory exists and isn't write protected
if (!f.exists())
throw new IllegalArgumentException("Delete: no such file or directory: " + path);
if (!f.canWrite())
throw new IllegalArgumentException("Delete: write protected: "+ path);
// If it is a directory, make sure it is empty
if (f.isDirectory())
String[] files = f.list();
if (files.length > 0)
throw new IllegalArgumentException("Delete: directory not empty: " + path);
// Attempt to delete it
boolean success = f.delete();
if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
Client.java_
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class Client extends JFrame {
static final int PORT = 26548; //Server Listening Port
static File file;
static final String HOST = "10.35.9.152";//Server Address
JTextField m_fileNameTF = new JTextField(25);
JFileChooser m_fileChooser = new JFileChooser();
Client() {
m_fileNameTF.setEditable(false);
JButton openButton = new JButton("Open");
openButton.addActionListener(new OpenAction());
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(openButton);
content.add(m_fileNameTF);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(content);
this.setSize(400,200);
class OpenAction implements ActionListener {
public void actionPerformed(ActionEvent ae) {
int retval = m_fileChooser.showOpenDialog(Client.this);
if (retval == JFileChooser.APPROVE_OPTION) {
file = m_fileChooser.getSelectedFile();
m_fileNameTF.setText(file.getAbsolutePath());
send(file.getAbsolutePath());
public static void main(String[] args) {
JFrame window = new Client();
window.setVisible(true);
public static boolean send( String filename )
try
System.out.println("Connecting to Server");
Socket skt = new Socket(HOST, PORT);
//Create a file input stream and a buffered input stream.
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream( skt.getOutputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Connected to Server");
System.out.println("Sending data...\n");
while ((i = in.read()) != -1)
out.write(i);
//System.out.println(i);
System.out.println("Transfer complete.");
//Close the socket and the file
out.flush();
out.close();
in.close();
skt.close();
return true;
catch( Exception e )
send(file.getAbsolutePath());
return false;
}I am making a server printer where all the system can take print out from the Printer installed on the server
i am not able to send file from the client to the Server. I am Attaching the code Please Help me it is my college project.
Server.java*
import java.io.*;
import java.lang.*;
import java.net.*;
import java.util.*;
import java.io.File;
class Server
static final int PORT = 26548; //Server Listening port
static String path;
public static void main(String args[])
System.out.println("Starting Server");
receive();
public static void receive()
while ( true )
try
//Create a socket
ServerSocket srvr = new ServerSocket(PORT);
Socket skt = srvr.accept();
String clientname= skt.getInetAddress().getHostAddress();
int clientport=skt.getPort();
long time = System.currentTimeMillis();
path= "C:\\Ankit Gupta\\Programs\\"+clientname+"\\"+time+" test.pdf";
System.out.println("File Recieved from : "+clientname+" : "+clientport);
//HttpServletRequest req;
//String remoteHost = req.getRemoteHost();
//String adr = getRemoteUser();
FileOutputStream fos = new FileOutputStream(path);
BufferedOutputStream out = new BufferedOutputStream(fos);
BufferedInputStream in = new BufferedInputStream( skt.getInputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Receiving data...");
while ((i = in.read()) != -1)
out.write(i);
out.flush();
in.close();
out.close();
skt.close();
srvr.close();
System.out.println("Transfer complete.");
printfile();
catch(Exception e)
System.out.print("Error! It didn't work! " + e + "\n");
try
Thread.sleep(1000);
catch (InterruptedException ie)
System.err.println("Interrupted");
} //end infinite while loop
public static void printfile()
delete();
public static void delete()
try
Thread.sleep(5000);
catch (InterruptedException ie)
System.err.println("Interrupted");
System.out.println("Deleting file");
File f = new File(path);
// Make sure the file or directory exists and isn't write protected
if (!f.exists())
throw new IllegalArgumentException("Delete: no such file or directory: " + path);
if (!f.canWrite())
throw new IllegalArgumentException("Delete: write protected: "+ path);
// If it is a directory, make sure it is empty
if (f.isDirectory())
String[] files = f.list();
if (files.length > 0)
throw new IllegalArgumentException("Delete: directory not empty: " + path);
// Attempt to delete it
boolean success = f.delete();
if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
Client.java_
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class Client extends JFrame {
static final int PORT = 26548; //Server Listening Port
static File file;
static final String HOST = "10.35.9.152";//Server Address
JTextField m_fileNameTF = new JTextField(25);
JFileChooser m_fileChooser = new JFileChooser();
Client() {
m_fileNameTF.setEditable(false);
JButton openButton = new JButton("Open");
openButton.addActionListener(new OpenAction());
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(openButton);
content.add(m_fileNameTF);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(content);
this.setSize(400,200);
class OpenAction implements ActionListener {
public void actionPerformed(ActionEvent ae) {
int retval = m_fileChooser.showOpenDialog(Client.this);
if (retval == JFileChooser.APPROVE_OPTION) {
file = m_fileChooser.getSelectedFile();
m_fileNameTF.setText(file.getAbsolutePath());
send(file.getAbsolutePath());
public static void main(String[] args) {
JFrame window = new Client();
window.setVisible(true);
public static boolean send( String filename )
try
System.out.println("Connecting to Server");
Socket skt = new Socket(HOST, PORT);
//Create a file input stream and a buffered input stream.
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream( skt.getOutputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Connected to Server");
System.out.println("Sending data...\n");
while ((i = in.read()) != -1)
out.write(i);
//System.out.println(i);
System.out.println("Transfer complete.");
//Close the socket and the file
out.flush();
out.close();
in.close();
skt.close();
return true;
catch( Exception e )
send(file.getAbsolutePath());
return false;
} -
Problem with JFileChooser and ImageIcon
I'm trying to create an ImageIcon object from file selected in JFileChooser. The problem is that jfc.getSelectedFile().getAbsolutePath() returns a string with backslashes and the constructor of ImageIcon requires the string to have slashes. I`ve tried to create it via URL but it doesn't work as well...
String lastUsedPath;
URL imageURL;
JFileChooser fc = new JFileChooser();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
int returnVal = fc.showDialog(frame,title);
if(returnVal==JFileChooser.APPROVE_OPTION){
lastUsedPath = fc.getSelectedFile().getAbsolutePath();
imageURL = getClass().getResource(lastUsedPath); //don't really get this but I copied it from Java Swing Tutorial
}else{
return null;
int curH, curW;
ImageIcon srcIcon = new ImageIcon(imageURL);
curW = srcIcon.getIconWidth();
curH = srcIcon.getIconHeight();If I use it this way imageURL is set to null.
If I set the imageURL as 'fc.getSelectedFile().toURL()' the string is eg.: "file:/E:/file.jpg" instead of "E:/file.jpg". After that the ImageIcon is created but width and height return -1.
If I try to create ImageIcon by 'new ImageIcon(lastUsedPath)' I get a not null object but the width & height of the ImageIcon is -1 as well.
What do I have to do to be able to create an ImageIcon from file selected in JFileChooser? Why is this so hard and mind blowing?It still returns the ImageIcon object with width & height set to -1.
EDIT:
Got it finally:
lastUsedPathForStupidImageIcon = fc.getSelectedFile().getPath();
img = ImageIO.read(new File(lastUsedPathForStupidImageIcon));
curH = img.getHeight(this);
curW = img.getWidth(this);The key was to use another String variable and hold the path instead of the absolute path
Edited by: Beholder on Jan 17, 2010 1:35 PM -
How do i load images from a folder?
Hello everyone,
Please can someone help me as i am stuck.
I am trying to research loading images from a folder called /images/unknown (unknown is a customer number and is stored in a variable called customerNo).
I feel that i will need to load the images into an array then display them to the screen with a viewer.
Can anybody help me.
Thanks in advanceWelcome to the Sun forums.
irknappers wrote:
...Please can someone help me as i am stuck.You might want to be more exact in future, about what you are stuck on.
import javax.imageio.ImageIO;
import java.io.FileFilter;
import java.io.File;
import javax.swing.JFileChooser;
class LoadImages {
public static void main(String[] args) {
String[] suffixes = ImageIO.getReaderFileSuffixes();
FileFilter fileFilter = new FileFilterType(suffixes);
File directory = null;
if (args.length==1) {
directory = new File( args[0] );
} else {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
int result = fileChooser.showOpenDialog( null );
if ( result == JFileChooser.APPROVE_OPTION ) {
directory = fileChooser.getSelectedFile();
} else {
System.err.println("Must select a directory to proceed, exiting.");
File[] images = directory.listFiles( fileFilter );
for (File file : images) {
System.out.println(file);
System.out.println( "The rest is left an exercise for the reader. ;-)" );
class FileFilterType implements FileFilter {
String[] types;
FileFilterType(String[] types) {
this.types = types;
public boolean accept(File file) {
for (String type : types) {
if ( file.getName().toLowerCase().endsWith( type.toLowerCase() ) ) {
return true;
return false;
} -
I'm writing a mazerace game...I need help from a Java Pro regarding GUI
I've tested my code using a textUI, but not successful with GUI.
Following are the files I have at present but are incomplete...someone please assist me, let me know what I'm missing to run the program successfully in a window.
All I need to do is to bring the maze (2D array) onto a window, and listen to the keys (A,S,D,W & J,K,L,I) and make the move accordingly (using the move method in the MazeRace Class)
This is my class - MazeRace
import javax.swing.*;
import java.io.*;
* This class is responsible for:
* -Initializes instance variables used to store the current state of the game
* -When a player moves it checks if the move is legal
* and updates the state of the game if move is allowable and made
* -Reports information about current state of the game when asked:
* o whether game has been won
* o how many moves have been made by a given player
* o what is the current configuration of the maze, etc.
public class MazeRace {
/** The Maze Race layout */
private static char[][] mazeLayout;
/** Dimensions of the maze */
//private static final int rowLength = mazeLayout.length;
//private static final int columnLength = mazeLayout[0].length;
/** space in the grid is a wall */
private static final char wall = 'X';
/** space in the grid has been used */
private static final char spaceUsed = '.';
/** space in the grid is available */
private static final char spaceAvailable = ' ';
/** Character for Charles, Ada & Goal*/
private static final char CHARLES = 'C';
private static final char ADA = 'A';
private static final char GOAL = 'G';
/** Location of Goal in the Maze */
private static int rowGoal = 0;
private static int columnGoal = 0;
/** Location of Ada in the Maze */
private static int rowAda = 0;
private static int columnAda = 0;
/** Location of Charles in the Maze */
private static int rowCharles = 0;
private static int columnCharles = 0;
/** Number of Ada's moves */
private static int countAdasMoves = 0;
/** Number of Charles's moves */
private static int countCharlesMoves = 0;
* Constructor for MazeRace
* ¶m mazeGrid - 2D array of characters
public MazeRace(char[][] mazeGrid){
this.mazeLayout = mazeGrid;
for (int row = 0; row < mazeLayout.length; row++){
for (int column = 0; column < mazeLayout[0].length; column++){
if (mazeLayout[row][column] == GOAL){
this.rowGoal = row;
this.columnGoal = column;
if (mazeLayout[row][column] == ADA){
this.rowAda = row;
this.columnAda = column;
if (mazeLayout[row][column] == CHARLES){
this.rowCharles = row;
this.columnCharles = column;
public boolean canMoveLeft(){
int rowA = this.rowAda;
int columnA = this.columnAda;
int rowC = this.rowCharles;
int columnC = this.rowCharles;
boolean canMove = false;
if (mazeLayout[rowA][columnA - 1] == spaceAvailable
|| mazeLayout[rowA][columnA - 1] == GOAL) {
canMove = true;
return canMove;
* This method takes in a single character value that indicates
* both the player making the move, and which direction the move is in.
* If move is legal, the player's position will be updated. Move is legal
* if player can move one space in that direction i.e. the player isn't
* moving out of the maze, into a wall or a space has already been used.
* @param moveDirection: indicates the player making the move and direction
* @return moveMade: boolean value true if move was made, false otherwise
public boolean move(char move){
boolean validMove = false;
/** store Ada's current row location in a temp variable */
int rowA = this.rowAda;
/** store Ada's current column location in a temp variable */
int columnA = this.columnAda;
/** store Charles current row location in a temp variable */
int rowC = this.rowCharles;
/** store Charles current column location in a temp variable */
int columnC = this.columnCharles;
/** if Ada is moving left, check if she can make a move */
if (move == 'A' && (mazeLayout[rowA][columnA - 1] == spaceAvailable
|| mazeLayout[rowA][columnA - 1] == GOAL)) {
/** if move is legal, then update old space to spaceUsed '.' */
mazeLayout[rowA][columnA] = spaceUsed;
/** update Ada's new position */
mazeLayout[rowA][columnA - 1] = ADA;
this.rowAda = rowA; //update new row location of Ada
this.columnAda = columnA - 1; //update new column location of Ada
validMove = true; //valid move has been made
countAdasMoves++; //increment Ada's legal move
/** if Ada is moving down, then check if she can make the move */
if (move == 'S'&& (mazeLayout[rowA + 1][columnA] == spaceAvailable
|| mazeLayout[rowA + 1][columnA] == GOAL)) {
mazeLayout[rowA][columnA] = spaceUsed;
mazeLayout[rowA + 1][columnA] = ADA;
this.rowAda = rowA + 1;
this.columnAda = columnA;
validMove = true;
countAdasMoves++;
/** if Ada is moving right, then check if she can make the move */
if (move == 'D'&& (mazeLayout[rowA][columnA + 1] == spaceAvailable
|| mazeLayout[rowA][columnA + 1] == GOAL)) {
mazeLayout[rowA][columnA] = spaceUsed;
mazeLayout[rowA][columnA + 1] = ADA;
this.rowAda = rowA;
this.columnAda = columnA + 1;
validMove = true;
countAdasMoves++;
/** if Ada is moving up, then check if she can make the move */
if (move == 'W'&& (mazeLayout[rowA - 1][columnA] == spaceAvailable
|| mazeLayout[rowA - 1][columnA] == GOAL)) {
mazeLayout[rowA][columnA] = spaceUsed;
mazeLayout[rowA - 1][columnA] = ADA;
this.rowAda = rowA - 1;
this.columnAda = columnA;
validMove = true;
countAdasMoves++;
/** if Charles is moving left, then check if he can make the move */
if (move == 'J'&& (mazeLayout[rowC][columnC - 1] == spaceAvailable
|| mazeLayout[rowC][columnC - 1] == GOAL)) {
mazeLayout[rowC][columnC] = spaceUsed;
mazeLayout[rowC][columnC -1] = CHARLES;
this.rowCharles = rowC;
this.columnCharles = columnC - 1;
validMove = true;
countCharlesMoves++;
/** if Charles is moving down, then check if he can make the move */
if (move == 'K'&& (mazeLayout[rowC + 1][columnC] == spaceAvailable
|| mazeLayout[rowC + 1][columnC] == GOAL)) {
mazeLayout[rowC][columnC] = spaceUsed;
mazeLayout[rowC + 1][columnC] = CHARLES;
this.rowCharles = rowC + 1;
this.columnCharles = columnC;
validMove = true;
countCharlesMoves++;
/** if Charles is moving right, then check if he can make the move */
if (move == 'L'&& (mazeLayout[rowC][columnC + 1] == spaceAvailable
|| mazeLayout[rowC][columnC + 1] == GOAL)) {
mazeLayout[rowC][columnC] = spaceUsed;
mazeLayout[rowC][columnC + 1] = CHARLES;
this.rowCharles = rowC;
this.columnCharles = columnC + 1;
validMove = true;
countCharlesMoves++;
/** if Charles is moving up, then check if he can make the move */
if (move == 'I'&& (mazeLayout[rowC - 1][columnC] == spaceAvailable
|| mazeLayout[rowC - 1][columnC] == GOAL)){
mazeLayout[rowC][columnC] = spaceUsed;
mazeLayout[rowC - 1][columnC] = CHARLES;
this.rowCharles = rowC - 1;
this.columnCharles = columnC;
validMove = true;
countCharlesMoves++;
return validMove;
* This method indicates whether the current maze configuration is a winning
* configuration for either player or not.
* Return 1 if Ada won
* Return 2 if Charles won
* Return 0 if neither won
* @return int won: Indicates who won the game (1 or 2) or no one won the
* game (0)
public static int hasWon() {
int won = 0;
/** if location of Goal's row and column equals Ada's then she won */
if (rowGoal == rowAda && columnGoal == columnAda){
won = 1;
/** if location of Goal's row and column equals Charles's then he won */
if (rowGoal == rowCharles && columnGoal == columnCharles){
won = 2;
/** if both players are away from the Goal then no one won */
if ((rowGoal != rowAda && columnGoal != columnAda) &&
(rowGoal != rowCharles && columnGoal != columnCharles)) {
won = 0;
return won;
* This method indicates whether in the current maze configuration both
* players are caught in dead ends.
* @return deadEnd: boolean value true if both players can't make a valid
* move, false otherwise
public static boolean isBlocked(){
boolean deadEnd = false;
/** Check if Ada & Charles are blocked */
if (((mazeLayout[rowAda][columnAda - 1] == wall
|| mazeLayout[rowAda][columnAda - 1] == spaceUsed
|| mazeLayout[rowAda][columnAda - 1] == CHARLES)
&& (mazeLayout[rowAda][columnAda + 1] == wall
|| mazeLayout[rowAda][columnAda + 1] == spaceUsed
|| mazeLayout[rowAda][columnAda + 1] == CHARLES)
&& (mazeLayout[rowAda + 1][columnAda] == wall
|| mazeLayout[rowAda + 1][columnAda] == spaceUsed
|| mazeLayout[rowAda + 1][columnAda] == CHARLES)
&& (mazeLayout[rowAda - 1][columnAda] == wall
|| mazeLayout[rowAda - 1][columnAda] == spaceUsed
|| mazeLayout[rowAda - 1][columnAda] == CHARLES))
&& ((mazeLayout[rowCharles][columnCharles - 1] == wall
|| mazeLayout[rowCharles][columnCharles - 1] == spaceUsed
|| mazeLayout[rowCharles][columnCharles - 1] == ADA)
&& (mazeLayout[rowCharles][columnCharles + 1] == wall
|| mazeLayout[rowCharles][columnCharles + 1] == spaceUsed
|| mazeLayout[rowCharles][columnCharles + 1] == ADA)
&& (mazeLayout[rowCharles + 1][columnCharles] == wall
|| mazeLayout[rowCharles + 1][columnCharles] == spaceUsed
|| mazeLayout[rowCharles + 1][columnCharles] == ADA)
&& (mazeLayout[rowCharles - 1][columnCharles] == wall
|| mazeLayout[rowCharles - 1][columnCharles] == spaceUsed
|| mazeLayout[rowCharles - 1][columnCharles] == ADA))) {
deadEnd = true;
return deadEnd;
* This method returns an integer that represents the number of moves Ada
* has made so far. Only legal moves are counted.
* @return int numberOfAdasMoves: number of moves Ada has made so far
public static int numAdaMoves() {
return countAdasMoves;
* This method returns an integer that represents the number of moves Charles
* has made so far. Only legal moves are counted.
* @return int numberOfCharlesMoves: number of moves Charles has made so far
public static int numCharlesMoves() {
return countCharlesMoves;
* This method returns a 2D array of characters that represents the current
* configuration of the maze
* @return mazeLayout: 2D array that represents the current configuration
* of the maze
public static char[][] getGrid() {
return mazeLayout;
* This method compares contents of this MazeRace object to given MazeRace.
* The two will not match if:
* o the two grids have different dimensions
* o the two grids have the same dimensios but positions of walls, players or
* goal differs.
* @param MazeRace: MazeRace object is passed in and compared with the given
* MazeRace grid
* @return boolean mazeEqual: true if both grids are same, false otherwise
public static boolean equals(char[][] mr) {
boolean mazeEqual = true;
/** If the length of the arrays differs, then they are not equal */
if (mr.length != mazeLayout.length || mr[0].length != mazeLayout[0].length){
mazeEqual = false;
} else {
/** If lengths are same, then compare every element of the array to other */
int count = 0;
int row = 0;
int column = 0;
while( count < mr.length && mazeEqual) {
if( mr[row][column] != mazeLayout[row][column]) {
mazeEqual = false;
count = count + 1;
row = row + 1;
column = column + 1;
return mazeEqual;
* This method represents the current state of the maze in a string form
* @return string mazeString: string representation of the maze configuration
public String toString() {
String mazeString = "";
for (int row = 0; row < mazeLayout.length; row++){
for (int column = 0; column < mazeLayout[0].length; column++){
mazeString = mazeString + mazeLayout[row][column];
mazeString = mazeString + "\n";
return mazeString.trim();
The following is the Driver class: MazeRaceDriver
import javax.swing.*;
import java.io.*;
* This class is the starting point for the maze race game. It is invoked
* from the command line, along with the location of the layout file and
* the desired interface type. Its main purpose is to initialize the
* components needed for the game and the specified interface.
public class MazeRaceDriver {
* A method that takes a text file representation of the maze and
* produces a 2D array of characters to represent the same maze.
* @param layoutFileName location of the file with the maze layout
* @return The maze layout.
public static char[][] getLayoutFromFile( String layoutFileName )
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(layoutFileName));
String s = br.readLine();
int r = 0; // start at row 1
int c = s.length(); // initialize column to the length of the string
while(s != null){
r++;
s = br.readLine();
char[][]grid = new char[r][c];
// this part, gets the text file into a char array
BufferedReader brr = new BufferedReader(new FileReader(layoutFileName));
String ss = brr.readLine();
int row = 0;
while(ss != null){
for(int col = 0; col < c; col++){
grid[row][col] = ss.charAt(col);
row++;
ss = brr.readLine();
return grid;
* The main method of your program.
* @param args command-line arguments provided by the user
public static void main( String[] args ) throws IOException {
// check for too few or too many command line arguments
if ( args.length != 2 ) {
System.out.println( "Usage: " +
"java MazeRaceDriver <location> <interface type>" );
return;
if ( args[1].toLowerCase().equals( "text" ) ) {
char[][] layout = getLayoutFromFile( args[0] );
MazeRace maze = new MazeRace( layout );
MazeRaceTextUI game = new MazeRaceTextUI( maze );
game.startGame();
else if ( args[1].toLowerCase().equals( "gui" ) ) {
// Get the filename using a JFileChooser
// read the layout from the file
// starting the window-based maze game
JFileChooser chooser = new JFileChooser("");
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
BufferedReader br =
new BufferedReader(new FileReader(chooser.getSelectedFile()));
String inputLine = br.readLine();
while (inputLine != null) {
System.out.println(inputLine);
inputLine = br.readLine();
char[][] layout = getLayoutFromFile( args[0] );
MazeRace maze = new MazeRace( layout );
MazeRaceWindow game = new MazeRaceWindow( maze );
game.startGame();
} else {
System.out.println("Cancel was selected");
} else {
System.out.println( "Invalid interface for game." +
" Please use either TEXT or GUI." );
return;
The following is the MazeRaceWindow class
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
* This class is responsible for displaying the maze race game. It should
* set up the maze window when the game is started and update the display
* with each move.
public class MazeRaceWindow extends JFrame {
private JLabel[][] mazeLabel;
private JFrame mazeFrame;
* Reference to the underlying MazeRace object which needs to be
* updated when either player moves
private MazeRace maze;
* Class constructor for the GUI object
* @param maze the underlying MazeRace object
public MazeRaceWindow( MazeRace maze ) {
this.maze = maze;
System.out.println(maze);
mazeFrame = new JFrame();
mazeFrame.setSize(200,200);
Container content = mazeFrame.getContentPane();
System.out.println(content);
content.setLayout(new GridLayout(.length, mazeLayout[0].Length));
for (int i = 0; i < MazeRace.length; i++ ) {
for (int j = 0; j < MazeRace[0].length; j++ ) {
mazeLabel = new JLabel[MazeRace.rowLength][MazeRace.columnLength];
content.add(mazeLabel[i][j]);
System.out.println(mazeLabel[i][j]);
mazeFrame.pack();
mazeFrame.setVisible(true);
//content.add(mazeLabel);
//mazeFrame.addKeyListener(this);
* A method to be called to get the game running.
public void startGame() throws IOException {
System.out.println();
/* loop to continue to accept moves as long as there is at least one
* player able to move and no one has won yet
while ( !maze.isBlocked() && maze.hasWon() == 0 ) {
// prints out current state of maze
System.out.println( maze.toString() );
System.out.println();
// gets next move from players
System.out.println("Next move?");
System.out.print("> ");
BufferedReader buffer =
new BufferedReader( new InputStreamReader( System.in ) );
String moveText = "";
moveText = buffer.readLine();
System.out.println();
// note that even if a string of more than one character is entered,
// only the first character is used
if ( moveText.length() >= 1 ) {
char move = moveText.charAt( 0 );
boolean validMove = maze.move( move );
// The game has finished, so we output the final state of the maze, and
// a message describing the outcome.
System.out.println( maze );
int status = maze.hasWon();
if ( status == 1 ) {
System.out.println( "Congratulations Ada! You won the maze in "
+ maze.numAdaMoves() + " moves!" );
} else if ( status == 2 ) {
System.out.println( "Congratulations Charles! You won the maze in "
+ maze.numCharlesMoves() + " moves!" );
} else {
System.out.println( "Stalemate! Both players are stuck. "
+ "Better luck next time." );
The following is the Listener class: MazeRaceListener
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/** Listens for keystrokes from the GUI interface to the MazeRace game. */
public class MazeRaceListener extends KeyAdapter {
* Reference to the underlying MazeRace object which needs to be updated
* when either player moves
private MazeRace maze;
* Reference to the MazeRaceWindow object that displays the state of
* the game
private MazeRaceWindow mazeWindow;
* Class constructor for the key listener object
* @param maze the underlying MazeRace object
public MazeRaceListener( MazeRace maze ) {
this.maze = maze;
* A method that sets which JFrame will display the game and need to be
* updated with each move.
* @param window the JFrame object that displays the state of the game
public void setMazeRaceWindow( MazeRaceWindow window ) {
mazeWindow = window;
* A method that will be called each time a key is pressed on the active
* game display JFrame.
* @param event contains the pertinent information about the keyboard
* event
public void keyTyped( KeyEvent event ) {
char move = event.getKeyChar();
// TODO: complete method so that the appropriate action is taken
// in the game
//mazeLabel.setText(String.valueOf(move).toUpperCase());
}and listen to the keys (A,S,D,W & J,K,L,I) and make the move accordingly [url http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html]How to Use Key Bindings
-
How to close JFileChooser dialog only while using ESC key ?
Hi All,
I am using a Frame and from this frame i am calling the JFileChooser via a JButton.
and using JFileChooser ShowOpenDialog() for open and close .
while doing ESC operation my Main Frame is getting closed with JFileChooser dialog.
Can i close only JFileChooser dialog while doing ESCAPE key operation.
I Have Escape key function in Main Frame file and JFileChooser file( EscKeyEventActionIntialization)
But while debuging i am not able to catch the esc key action inside EscKeyEventActionIntialization.
I have attached the code, please suggest me , if i need to do any change .
* To change this template, choose Tools | Templates
* and open the template in the editor.
package MainPackage;
import javax.swing.filechooser.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class SourceSettings extends javax.swing.JDialog{
JDialog dialog;
private javax.swing.JFileChooser jFileChooser1;
MainFile mainFile;
ImageIcon icon = new ImageIcon(getClass().getResource("/Resource/mchpIcon.GIF"));
/** Creates new form SourceSetting */
public SourceSettings(MainFile pMPFS) {
dialog = new JDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
mainFile = pMPFS;
jFileChooser1 = new javax.swing.JFileChooser();
dialog.add(jFileChooser1);
EscKeyEventActionIntialization();
jFileChooser1.setDialogTitle("Browse For Folder");
jFileChooser1.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 11)); // NOI18N
jFileChooser1.setName("Browse For Folder"); // NOI18N
public String getDirctoryPath()
int retval = jFileChooser1.showOpenDialog(dialog);
dialog.setVisible(true);
if(retval == JFileChooser.APPROVE_OPTION)
return jFileChooser1.getSelectedFile().getAbsolutePath().toString();
else
dialog.setVisible(false);
dialog.dispose();
return null;
public String getParentDirctoryPath()
return jFileChooser1.getCurrentDirectory().getAbsolutePath().toString();
public String getOutputDirctoryPath()
if(jFileChooser1.showOpenDialog(mainMpfs) == JFileChooser.APPROVE_OPTION)
return jFileChooser1.getCurrentDirectory().getAbsolutePath().toString();
else
dialog.dispose();
return null;
private void EscKeyEventActionIntialization()
Action ESCactionListener = new AbstractAction () {
public void actionPerformed(ActionEvent actionEvent) {
dialog.setVisible(false);
dialog.dispose();
KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true);
JComponent comp = dialog.getRootPane();
comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(stroke, "ESCAPE");
ActionMap actionMap = comp.getActionMap();
actionMap.put("ESCAPE", ESCactionListener);
}You have a class that extends JDialog and has a JDialog member variable (very confusing), and no main(...) method. How is the class used as a JDialog?
To get better help sooner, post a SSCCE that clearly demonstrates your problem. Note that this should be executable and should not contain any extraneous code.
db -
I cannot remove embedded barcode from the image. Due to saving compression.
Hi guys,
I recreate a thread to prevent confusing on my previous one. Please only reply to this thread thanks.
Ok, for a start I will give some general description about the application I made.
I had some problem with the image being compressed while it is saved.
Because saving an image will cause it to compress and had its pixel valued changed, I could not successfully remove the bardcode that is embedded inside a image(although some of the pixel value will be returned to original normally). I had placed my code below and will accept any opinion that will help me solve the removal of barcode problem.
What my application does is actually very simple. It will take the pixel value of the area inside the image that will be embed with the barcode first, then it will take the pixel value of the barcode and use the formula (1-alpha * Image pixel value) + (alpha * barcode pixel value) = new pixel value which will contain the barcode that had been embedded inside. The formula works great but when I saved the image the pixel value will change due to compression. On the removal of barcode my application will read every pixel value from the image embedded with barcode (only the area with barcode embedded), then it will go on to read every pixel value of the barcode used for embedding and then use the formula (Embedded image pixel value - (alpha * Barcode pixel value) - (1 - alpha) = original pixel value. But due to the reason that compression will change some of the pixel inside the saved image to drop in its value, the result from the removal formula will be negative and hence caused my result image to become wierd as it will red colors instead of original color on some of its pixel. I tried saving under PNG format which people said to be lossless compression but the result is still the same.
So I need to ask you guys for opinion or help me find the part where I actually did wrongly and caused the image pixel value to change.
Thanks. Please proceed and read below for the codes that I used. It is messy and I will sort it out later.
When alpha is set as 1 the barcode will appear to be overwrite onto the image. But when alpha is set as 0.1 the barcode will appear to be transparent and almost seems to be not there on the image when embedded.
This is the code I used to retrieve image pixel when embedding:
public static int[] getImagePixelValue(BufferedImage image, int x, int y){
//Create an array to store image RGB value
int[] imageRGB = new int[3];
//Get height and width from input image
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
//Get raw RGB value from image
int imageValue = image.getRGB(x, y);
//Convert image raw RGB value
int imageRed = ((image.getRGB(x, y) >> 16) & 0xff);
int imageGreen = ((image.getRGB(x, y) >> 8) & 0xff);
int imageBlue = image.getRGB(x, y) & 0xff;
//Input the converted RGB value into the array
imageRGB[0] = imageRed;
imageRGB[1] = imageGreen;
imageRGB[2] = imageBlue;
/*//Print out the pixel value to check
System.out.println("Image red pixel: "+imageRGB[0]);
System.out.println("Image green pixel: "+imageRGB[1]);
System.out.println("Image blue pixel: "+imageRGB[2]);*/
//Return image RGB value
return imageRGB;
}This is the code I used to retrieve barcode pixel for embedding:
public static int[] getWatermarkPixelValue(BufferedImage watermark, int x, int y){
//Create an array to store watermark RGB value
int[] watermarkRGB = new int[3];
//Get height and width from input watermark
int watermarkWidth = watermark.getWidth();
int watermarkHeight = watermark.getHeight();
int watermarkValue = watermark.getRGB(x, y);
//Convert watermark raw RGB value
int watermarkRed = ((watermark.getRGB(x, y) >> 16) & 0xff);
int watermarkGreen = ((watermark.getRGB(x, y) >> 8) & 0xff);
int watermarkBlue = watermark.getRGB(x, y) & 0xff;
//Input the converted RGB value into the array
watermarkRGB[0] = watermarkRed;
watermarkRGB[1] = watermarkGreen;
watermarkRGB[2] = watermarkBlue;
/*//Print out the pixel value to check
System.out.println("Watermark red pixel: "+watermarkRGB[0]);
System.out.println("Watermark green pixel: "+watermarkRGB[1]);
System.out.println("Watermark blue pixel: "+watermarkRGB[2]);*/
//Return watermark RGB value
return watermarkRGB;
}This is the code I used for merging the image pixel and barcode pixel to get the embedded pixel value:
public static int[] getEmbeddedPixelValue(int[] imagePixelValue, int[] watermarkPixelValue, double alpha){
//Create a object to hold embedded pixel value
int[] embeddedRGBValue = new int[3];
//Change image pixel value into double calculating equation
double imgRedValue = (double) imagePixelValue[0];
double imgGreenValue = (double) imagePixelValue[1];
double imgBlueValue = (double) imagePixelValue[2];
//Change watermark pixel value into double calculating equation
double wmRedValue = (double) watermarkPixelValue[0];
double wmGreenValue = (double) watermarkPixelValue[1];
double wmBlueValue = (double) watermarkPixelValue[2];
//Equation for embedding image and watermark together
double embeddedRed = ((1.0 - alpha) * imgRedValue) + (alpha * wmRedValue);
double embeddedGreen = ((1.0 - alpha) * imgGreenValue) + (alpha * wmGreenValue);
double embeddedBlue = ((1.0 - alpha) * imgBlueValue) + (alpha * wmBlueValue);
//Changing embedded value from double to int
int embeddedRedValue = (int) embeddedRed;
int embeddedGreenValue = (int) embeddedGreen;
int embeddedBlueValue = (int) embeddedBlue;
//input the embedded RGB value into the array
embeddedRGBValue[0] = embeddedRedValue;
embeddedRGBValue[1] = embeddedGreenValue;
embeddedRGBValue[2] = embeddedBlueValue;
//Return embedded pixel value
return embeddedRGBValue;
}This is the code where I used for the embedding process:
else if(target == embedButton){
String xCoordinate = JOptionPane.showInputDialog(embedButton, "Enter coordinate X", "When you want to embed the watermark?", JOptionPane.QUESTION_MESSAGE);
String yCoordinate = JOptionPane.showInputDialog(embedButton, "Enter coordinate Y", "When you want to embed the watermark?", JOptionPane.QUESTION_MESSAGE);
int xValue = Integer.parseInt(xCoordinate);
int yValue = Integer.parseInt(yCoordinate);
int wCounter = 0;
int hCounter = 0;
//Create file object to be used in embedding and removing watermark
File inputImage = new File(imagePath);
File inputWatermark = new File(watermarkPath);
//Convert string into double for calculation of embedded pixel value
try {
alphaDouble = Double.valueOf(alphaValue).doubleValue();
catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
try{
//Define selected image as testPic and make java read the file selected
BufferedImage image= ImageIO.read(inputImage);
BufferedImage watermark= ImageIO.read(inputWatermark);
BufferedImage testing;
//Get height and width value from the selected image
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
//Get height and width value from the selected barcode
int watermarkWidth = watermark.getWidth();
int watermarkHeight = watermark.getHeight();
int totalWidth = watermarkWidth + xValue;
int totalHeight = watermarkHeight + yValue;
//Use nested for loop to get RGB value from every pixel that the barcode will be embedded in the selected image
if(totalWidth <= imageWidth && totalHeight <= imageHeight){
for (int h = yValue ; h < totalHeight; h++){
for (int w = xValue; w < totalWidth; w++){
int[] imagePixelValue = getImagePixelValue(image, w, h);
int[] watermarkPixelValue = getWatermarkPixelValue(watermark, wCounter, hCounter);
int[] embeddedPixelRGBValue = getEmbeddedPixelValue(imagePixelValue, watermarkPixelValue, alphaDouble);
setRed(image, w, h, embeddedPixelRGBValue[0]);
setGreen(image, w, h, embeddedPixelRGBValue[1]);
setBlue(image, w, h, embeddedPixelRGBValue[2]);
wCounter++;
if(wCounter == watermarkWidth){
wCounter = 0;
hCounter++;
else{
JOptionPane.showMessageDialog(embedButton, "The watermark cannot be embedded at the coordinates.");
tempImage = image;
imageIcon = new ImageIcon(tempImage);
labelImage.setIcon(imageIcon);
imagePanel.add(labelImage);
container.add(imagePanel, BorderLayout.CENTER);
setVisible(true);
System.out.println("Embedding completed");
catch(Exception errorEmbedding){
//If there is any error, the try and catch function will tell you the error
System.out.println("The following error occured: "+errorEmbedding);
}This is the code I use to save the image that had been embedded with the barcode:
else if(target == saveAction){
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
chooser.setCurrentDirectory(new File("."));
int returnVal = chooser.showSaveDialog(getParent());
if(returnVal == JFileChooser.APPROVE_OPTION) {
String name = chooser.getSelectedFile().getAbsolutePath();
//Create a string instant to hold outputImage path name
String saveFile = chooser.getSelectedFile().getName()+"."+fileType;
//Create file output to decide what name will be used to save the file
File outputImage = new File(saveFile);
try{
//Save the file with the name used
ImageIO.write((RenderedImage) tempImage,fileType,outputImage);
catch(Exception errorSaving){
//If there is any error, the try and catch function will tell you the error
System.out.println("The following error occured: "+errorSaving);
else{
}This is the code I used for removal process of barcode:
else if(target == removeButton){
//Create file object to be used in embedding and removing watermark
File inputImage = new File("removalTesting.jpg");
//File inputWatermark = new File(watermarkPath);
//Used a defined barcode for testing of removing barcode from embedded image
File inputWatermark = new File("barcode.jpg");
/*//Convert string into double for calculation of embedded pixel value
try {
alphaDouble = Double.valueOf(alphaValue).doubleValue();
catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
//Used a defined alpha value for testing of removing barcode from embedded image
//alphaDouble = 0.5;
//Create x and y value for the starting coordinates of barcode embedded in the embedded image
int xValue = 0;
int yValue = 0;
int wCounter = 0;
int hCounter = 0;
try{
//Define selected image as testPic and make java read the file selected
BufferedImage image= ImageIO.read(inputImage);
BufferedImage watermark= ImageIO.read(inputWatermark);
//Get height and width value from the selected image
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
//Get height and width value from the selected barcode
int watermarkWidth = watermark.getWidth();
int watermarkHeight = watermark.getHeight();
int totalWidth = watermarkWidth + xValue;
int totalHeight = watermarkHeight + yValue;
//Use nested for loop to get RGB value from every pixel that the barcode had been embedded in the embedded image
if(totalWidth <= imageWidth && totalHeight <= imageHeight){
for (int h = yValue ; h < totalHeight; h++){
for (int w = xValue; w < totalWidth; w++){
int[] imagePixelValue = getImagePixelValue(image, w, h);
int[] watermarkPixelValue = getWatermarkPixelValue(watermark, wCounter, hCounter);
int[] removedPixelRGBValue = getOriginalImagePixelValue(imagePixelValue, watermarkPixelValue, alphaDouble);
setRed(image, w, h, removedPixelRGBValue[0]);
setGreen(image, w, h, removedPixelRGBValue[1]);
setBlue(image, w, h, removedPixelRGBValue[2]);
wCounter++;
if(wCounter == watermarkWidth){
wCounter = 0;
hCounter++;
tempImage = image;
imageIcon = new ImageIcon(tempImage);
labelImage.setIcon(imageIcon);
imagePanel.add(labelImage);
container.add(imagePanel, BorderLayout.CENTER);
setVisible(true);
System.out.println("Embedding completed");
catch(Exception errorEmbedding){
//If there is any error, the try and catch function will tell you the error
System.out.println("The following error occured: "+errorEmbedding);
}Sorry if the codes are in a mess, I did not had the time to sort it out yet but most likely do it when I got the removal of barcode done.
Follow this link to have a look of the result I see in my application when I got the barcode embedded into the image I selected:
[http://img356.imageshack.us/my.php?image=beforeremovalresultmg2.jpg]
Follow this link to have a look of the result I see in my application after I got the barcode removed:
[http://img523.imageshack.us/my.php?image=removalresultmx4.jpg]
As you can see from the link, after I remove the barcode from the image. Some of the pixel actually went back to normal in the barcode area when the the barcode is embedded into the image. But some pixel in the barcode area had its value changed due to compression when I save the image file I think.
Anyone can help me find out the problem?
Thanks.KamenRider wrote:
I suspect the problem lies in the code when I save the image. Because people said that PNG was loseless compression but when I saved in PNG some of the pixel went back to normal while some did not. This is obviously the cause from changing of pixel value when I saved the image.You are almost certainly wrong. This is trivially easy to check. Print out the color of a certain pixel immediately before you save it. Open the saved PNG in your favorite image manipulation program and check the saved value of that same pixel. When you re-load the saved PNG, print out the color again. It should be unchanged.
Thanks you for trying to help me spot the problem but the formula is correct. The alpha value i used in my application is used to set the transparency of the barcode that will be embedded in the image. Hence, when alpha = 1 the new pixel value should be the barcode value. ^^The formula isn't wrong, it's just not doing what you think it's doing. Remember that you're working with ints here, not floating point numbers, so they have finite precision. When you case from double to int, fractions are dropped. As morgalr pointed out, your formula is:
(1-alpha * Image pixel value) + (alpha * barcode pixel value) = new pixel value You didn't show us the code for getOriginalImagePixelValue but I imagine it's:
original pixel value = (new pixel value - alpha * barcode pixel value) / (1 - alpha)On a piece of paper, take alpha = 0.9, image pixel = 17 and barcode pixel = 100. Calculate out what you should get for new pixel value and then calculate what you should get for original pixel value. You will find they don't match. -
Creating a new window from and action event
Hey I have a problem i would like most of my menu items to create a new window containing a set text and i was thinking of creating a new container with a JTextArea but for some reason its not working. if someone could help me that be great... so my question is how do create another window (TextArea) with my tokenized array info in it open up when Print File or Print Total is the event??
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.util.StringTokenizer;
import javax.swing.plaf.*;
class PhoneProject extends JFrame implements ActionListener
private static final int WIDTH = 260;
private static final int HEIGHT = 160;
private static final int X_ORIGIN = 402;
private static final int Y_ORIGIN = 299;
ArrayList internalCalls = new ArrayList();
ArrayList externalCalls = new ArrayList();
PhoneCall internal;
PhoneCall external;
JMenu query = new JMenu("Query");
JMenu proccess = new JMenu("Proccess");
String inRecord;
int numExtension;
int numCallType;
int numSeconds;
int totalIntTime;
int totalExtTime;
public static void main(String args[])
PhoneProject frame = new PhoneProject();
frame.setVisible(true);
public void LoadArray(File myFile) throws IOException
FileReader fr = new FileReader(myFile);
BufferedReader br = new BufferedReader(fr);
while ((inRecord = br.readLine()) != null)
StringTokenizer tokenizer = new StringTokenizer(inRecord);
String extension = tokenizer.nextToken();
String callType = tokenizer.nextToken();
String seconds = tokenizer.nextToken();
numExtension = Integer.parseInt(extension);
numCallType = Integer.parseInt(callType);
numSeconds = Integer.parseInt(seconds);
if (numCallType == 0)
internal= new PhoneCall(numExtension, numCallType, numSeconds);
totalIntTime = (totalIntTime + numSeconds);
//System.out.println(totalIntTime + "int");
internalCalls.add(internal);
if (numCallType == 1)
external = new PhoneCall(numExtension, numCallType, numSeconds);
totalExtTime = (totalExtTime + numSeconds);
//System.out.println(totalExtTime + "EXT");
externalCalls.add(external);
System.out.println(internal.getSeconds());
public PhoneProject()
Container contentPane;
setBounds(X_ORIGIN, Y_ORIGIN, WIDTH, HEIGHT);
setTitle("Phone Analyzer");
setResizable(true);
contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
JMenu file = new JMenu("File");
JMenuItem item;
item = new JMenuItem("Open");
item.addActionListener(this);
file.add(item);
item = new JMenuItem("Exit");
item.addActionListener(this);
file.add(item);
proccess.setEnabled(false);
item = new JMenuItem("Print File");
item.addActionListener(this);
proccess.add(item);
item = new JMenuItem("Print Totals");
item.addActionListener(this);
proccess.add(item);
item = new JMenu("Low and High");
item.addActionListener(this);
proccess.add(item);
JMenuItem subItem = new JMenuItem("Compare");
subItem.addActionListener(this);
item.add(subItem);
query.setEnabled(false);
item = new JMenu("Average Total Utilization");
item.addActionListener(this);
query.add(item);
JMenuItem itemInt = new JMenuItem("Internal");
itemInt.addActionListener(this);
item.add(itemInt);
JMenuItem itemExt = new JMenuItem("External");
itemExt.addActionListener(this);
item.add(itemExt);
item = new JMenuItem("Highest Internal Utilization");
item.addActionListener(this);
query.add(item);
item = new JMenuItem("Highest Total Utilization");
item.addActionListener(this);
query.add(item);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
menuBar.add(file);
menuBar.add(proccess);
menuBar.add(query);
contentPane.add(new JTextArea("Phone Report"));
public void actionPerformed(ActionEvent event)
String menuName;
menuName = event.getActionCommand();
if (menuName == "Open")
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION)
try
File myFile = chooser.getSelectedFile();
this.LoadArray(myFile);
proccess.setEnabled(true);
query.setEnabled(true);
catch (Exception e)
if (menuName == "Print File")
JTextArea display = new JTextArea();
display.setText("Hello");testing to see if it works
display.setVisible(true);
if (menuName == "Print Total")
JTextArea display = new JTextArea();
display.setText("Hello");//testing
display.setVisible(true);
if (menuName == "Exit")
System.exit(0);
}Phone.txt
2000 0 300
2000 0 538
2000 1 305
2000 1 729
2005 0 205
2005 0 305
2005 1 592
2005 1 594
2010 0 364
2010 0 464
2010 1 904
2010 1 100
2020 0 234
2020 0 839
2020 1 999
2020 1 210
Assignment: Array Based GUI Assignment
Telephone call data has been collected from a company's telephone switch. You have been asked to analyze it and produce various statistics.
Input File
The input file is a sequential file. It is in no specific order. The file contains an extension number, type of call, and the length of call in seconds. A record is produced each time a call is made from that extension. You should create your own test file.
Field Type Description
Extension Integer Extension number. This is a 4 digit number. Valid Extensions are 2000 to 2020.
Type Integer Value of 1 means internal, any other value is an external call.
Time Long Length of call in seconds
Example:
� 2000,1,60 : ----->>>> Extension 2000 had an internal call that lasted 60 seconds
� 2000,1,356: ----->>>> Extension 2000 had an internal call that lasted 356 seconds
� 2019,2,65: ------>>>> Extension 2019 had an external call that lasted 65 seconds
� 2001,1,355: ----->>>> Extension 2001 had an internal call that lasted 355 seconds
Process
1. Use 2 arrays to accumulate the time of calls for each extension, both internal and external.
2. The reports and queries are to be produced from the arrays.
Hints:
� Create 2 arrays: one for internal calls and one for external calls.
� Load the arrays in Form Load: do not do any calculations here.
� The report and queries can totally be produced from the arrays.
Output: Report
Telephone Useage Report
Extension Internal External
2000 4500 3500
2001 19350 22981
2002 2333 900
2003 3144 122
Totals 99999 99999
Output: Queries
On the form add add query capability.
1. Average Total Utilization: Internal Calls: 9999 (total length of all internal calls / number extensions)
2. Average Total Utilization: External Calls: 9999
3. Extension with the highest internal call utilization: Ext xxxx; 9999 seconds.
4. Extension with the highest total utilization.
Form Design
The design of the form is up to you. However, use the following guidelines:
� use menus (preferred) or command buttons
� use a common dialog box to ask for the file name
� use a list box or text box to display the output
the caption on the form should include your namehi
u can try like following code
if (menuName == "Print File")
new mytextframe();
class mytextframe extends JFrame{
JTextArea display = new JTextArea();
public mytextframe()
setSize(300,300);
setVisible(true);
add(display);
display.setText( "ello");
} -
Trasnfer File from Client to server
I am making a server printer where all the system can take print out from the Printer installed on the server
i am not able to send file from the client to the Server. I am Attaching the code Please Help me it is my college project.
Server.java*
import java.io.*;
import java.lang.*;
import java.net.*;
import java.util.*;
import java.io.File;
class Server
static final int PORT = 26548; //Server Listening port
static String path;
public static void main(String args[])
System.out.println("Starting Server");
receive();
public static void receive()
while ( true )
try
//Create a socket
ServerSocket srvr = new ServerSocket(PORT);
Socket skt = srvr.accept();
String clientname= skt.getInetAddress().getHostAddress();
int clientport=skt.getPort();
long time = System.currentTimeMillis();
path= "C:\\Ankit Gupta\\Programs\\"+clientname+"\\"+time+" test.pdf";
System.out.println("File Recieved from : "+clientname+" : "+clientport);
//HttpServletRequest req;
//String remoteHost = req.getRemoteHost();
//String adr = getRemoteUser();
FileOutputStream fos = new FileOutputStream(path);
BufferedOutputStream out = new BufferedOutputStream(fos);
BufferedInputStream in = new BufferedInputStream( skt.getInputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Receiving data...");
while ((i = in.read()) != -1)
out.write(i);
out.flush();
in.close();
out.close();
skt.close();
srvr.close();
System.out.println("Transfer complete.");
printfile();
catch(Exception e)
System.out.print("Error! It didn't work! " + e + "\n");
try
Thread.sleep(1000);
catch (InterruptedException ie)
System.err.println("Interrupted");
} //end infinite while loop
public static void printfile()
delete();
public static void delete()
try
Thread.sleep(5000);
catch (InterruptedException ie)
System.err.println("Interrupted");
System.out.println("Deleting file");
File f = new File(path);
// Make sure the file or directory exists and isn't write protected
if (!f.exists())
throw new IllegalArgumentException("Delete: no such file or directory: " + path);
if (!f.canWrite())
throw new IllegalArgumentException("Delete: write protected: "+ path);
// If it is a directory, make sure it is empty
if (f.isDirectory())
String[] files = f.list();
if (files.length > 0)
throw new IllegalArgumentException("Delete: directory not empty: " + path);
// Attempt to delete it
boolean success = f.delete();
if (!success)
throw new IllegalArgumentException("Delete: deletion failed");
Client.java_
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import java.net.*;
public class Client extends JFrame {
static final int PORT = 26548; //Server Listening Port
static File file;
static final String HOST = "10.35.9.152";//Server Address
JTextField m_fileNameTF = new JTextField(25);
JFileChooser m_fileChooser = new JFileChooser();
Client() {
m_fileNameTF.setEditable(false);
JButton openButton = new JButton("Open");
openButton.addActionListener(new OpenAction());
JPanel content = new JPanel();
content.setLayout(new FlowLayout());
content.add(openButton);
content.add(m_fileNameTF);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(content);
this.setSize(400,200);
class OpenAction implements ActionListener {
public void actionPerformed(ActionEvent ae) {
int retval = m_fileChooser.showOpenDialog(Client.this);
if (retval == JFileChooser.APPROVE_OPTION) {
file = m_fileChooser.getSelectedFile();
m_fileNameTF.setText(file.getAbsolutePath());
send(file.getAbsolutePath());
public static void main(String[] args) {
JFrame window = new Client();
window.setVisible(true);
public static boolean send( String filename )
try
System.out.println("Connecting to Server");
Socket skt = new Socket(HOST, PORT);
//Create a file input stream and a buffered input stream.
FileInputStream fis = new FileInputStream(filename);
BufferedInputStream in = new BufferedInputStream(fis);
BufferedOutputStream out = new BufferedOutputStream( skt.getOutputStream() );
//Read, and write the file to the socket
int i;
System.out.println("Connected to Server");
System.out.println("Sending data...\n");
while ((i = in.read()) != -1)
out.write(i);
//System.out.println(i);
System.out.println("Transfer complete.");
//Close the socket and the file
out.flush();
out.close();
in.close();
skt.close();
return true;
catch( Exception e )
send(file.getAbsolutePath());
return false;
}Edited by: Ankit__Gupta on Jul 24, 2009 1:59 AMthe network is working perfectly fineThe network is timing out your connect attempts so there is something wrong somewhere.
catch will give the error msg or the entire try block. but will it give for the exact line?Suppose you try it yourself and find out?
by the way i m catching the exception i m just not printing it.Yes I am aware of that, thanks, I can read, and that's exactly what I commented on, and by the way Java forces you to catch the exception, so there's no virtue in that. On the contrary. Catchingand ignoring the exception is why its taken five days to debug this simple problem. Never do that. -
Problem with JFileChooser when run using Netbeans
I just want to state that I have NO problem writing the code that brings up this component. My problem is what happens when the JFileChooser component is loaded. My environment is Windows Vista, Java SE 1.6.0. -> Netbeans IDE 5.0. The code I use is as follows:
public RegexParser()
JFileChooser openfile = new JFileChooser();
openfile.showOpenDialog(RegexParser.this);
int returnVal = openfile.showOpenDialog(RegexParser.this);
if (returnVal == JFileChooser.APPROVE_OPTION)
//This code gets the path of the file and uses as a parameter to parse data.
filename = openfile.getSelectedFile().getPath();
openfile.setVisible(false);
ParseData(filename);
The problem is when I try to select an option from the combobox labeled "Look In:" Every directory I select which is not the root of the drive will display NO FILES even though there are files in that directory.
Notice: I have also run the same code using the cmd.exe and it works fine. I have also looked at: http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html but have found nothing that has helped me.
Can someone explain what is the problem? Is this a known bug in Netbeans? Is there any code that can be used as a workaround?Yes I copied the code to my machine and run it. The example program had problems when I executed using netbeans it had the problem.
When I executed using Command Prompt there where no problems. -
Playing a video file retrieved from database using JMF
Hello!
I am developing a multimedia application that has to store videos, music, pictures in a database. I did a little searching and found that JMF is a very good solution in playing video/music using Java. I found some examples to play the video/music stored on the hard drive (as separate files), but i have to be able to take the video/music from the database, and feed it to the JMF player. Has anyone some suggestions about how this could be done?
Thanks in advance!
Edited by: radu.miron on May 8, 2008 9:03 AMWell, i think i didn't make myself clear enough :). i know how to retreive the data from the database. The thing is this: let's suppose i have a 700 MB movie stored in the database. One option to play that movie would be to retrieve it from the DB, create a file somewhere on the disk, and put the data retrieved from the database in that file. But this involves that the disk will be overflooded when let's say 100 people watch 100 different movies. Another option (as i see it) would be to gradually take parts of the movie from the database (first 50 MB, then another 50 MB, then another and so on), and feed it to the JMF player. The user will watch the movie, but will not have the whole movie available, just a part of it. As he watches it, the application takes the next chunck of movie data and feeds it to the JMF player. That was the question i intended to ask, if anyone has any idea regarding the second option, and not the part with retrieving from the database, but the part with giving the JMF player video data to play.
The example i found on the web with JMF player is the following:
import javax.swing.*;*
*import javax.media.*;
import java.awt.*;*
*import java.awt.event.*;
import java.net.*;*
*import java.io.*;
public class PlayVideo extends JFrame {
Player player;
Component center;
Component south;
public PlayVideo() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton button = new JButton("Select File");
ActionListener listener =
new ActionListener() {
public void actionPerformed(
ActionEvent event) {
JFileChooser chooser =
new JFileChooser(".");
int status =
chooser.showOpenDialog(PlayVideo.this);
if (status ==
JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
try {
load(file);
} catch (Exception e) {
System.err.println("Try again: " + e);
button.addActionListener(listener);
getContentPane().add(button,
BorderLayout.NORTH);
pack();
show();
public void load(final File file)
throws Exception {
URL url = file.toURL();
final Container contentPane =
getContentPane();
if (player != null) {
player.stop();
player = Manager.createPlayer(url);
ControllerListener listener =
new ControllerAdapter() {
public void realizeComplete(
RealizeCompleteEvent event) {
Component vc =
player.getVisualComponent();
if (vc != null) {
contentPane.add(vc,
BorderLayout.CENTER);
center = vc;
} else {
if (center != null) {
contentPane.remove(center);
contentPane.validate();
Component cpc =
player.getControlPanelComponent();
if (cpc != null) {
contentPane.add(cpc,
BorderLayout.SOUTH);
south = cpc;
} else {
if (south != null) {
contentPane.remove(south);
contentPane.validate();
pack();
setTitle(file.getName());
player.addControllerListener(listener);
player.start();
public static void main(String args[]) {
PlayVideo pv = new PlayVideo();
}but this example plays a video stored on the disk ( player = Manager.createPlayer(url); ), rather than a chunck of data (the whole movie or parts of it) retrieved from the database.
Sorry for the misunderstanding!
Cheers!
Maybe you are looking for
-
Remote Control no longer works
Sometime in the past year, my apple remote stopped working with my Macbook Pro. None of the buttons work 99% of the time. It used to be that just clicking the menu button on the remote took me to Frontrow, but this doesn't work anymore. Once in a gre
-
I "lost" a movie - "Mindhunters" and can't get it any more! No support!
I've never got the movie, but sometimes I am getting a reminder (!?!) podded to my iPad - but no way to get hold of that Message/Pod So I tried to dowload the thing - no way - always says "already downloaded ...." but's not here! In iTunes (looking a
-
I had 400mb of free space. I added one new music album and wanted to sync. I get a message no photos are synced (the 20mb i had on it were gone) because i'm out of free space. After syncing, the info says i still have 365 mb of free space. I sync aga
-
Dear Experts, can someone shed som light on my topic below. I am using SCM 7.0 and deployment optimisation. I have a scenario whereby the MAD date of the confirmed distribution receipt is 1 day later than is required thereby creating an alert. The
-
Hi, Can anyone please help me out on the below exception. When am clicking a particular product am getting below exception java.lang.IllegalStateException: Response already committed at weblogic.servlet.internal.ServletResponseImpl.objectIfCommit