Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Remove last item from JList

4 views
Skip to first unread message

CBO

unread,
Jul 14, 2008, 5:11:53 AM7/14/08
to
Hi all,

I am currently developing a java application that reads in a file and
populates the information inside the data file into a JList. I want
the user to be able to select an item from the JList and then they are
able to delete the item which rewrites the new data to the the file
and repopulates the JList.

This method works fine until there is only one item remaining inside
the JList. The problem is when the user presses delete the item is
removed from JList but an error is produced and the new data is not
written to the file i.e. to make it empty.

Below is the error message that is displayed:


Exception occurred during event dispatching:
java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at
remoteshutdown.ExceptionsList.btnDelete_actionPerformed(ExceptionsList.java:
228)
at
remoteshutdown.ExceptionsList_btnDelete_actionAdapter.actionPerformed(ExceptionsList.java:
273)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.Dialog$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at
remoteshutdown.mainScreen.jMenuOptionsExceptions_actionPerformed(mainScreen.java:
979)
at remoteshutdown.mainScreen
$mainScreen_jMenuOptionsExceptions_ActionAdapter.actionPerformed(mainScreen.java:
1145)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI
$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown
Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Below is the code that I am using:

public void btnDelete_actionPerformed(ActionEvent e) {
this.lstComputerExceptions.getModel();
if (lstComputerExceptions.getSelectedIndices().length > 0) {
int[] tmp = this.lstComputerExceptions.getSelectedIndices();
int[] selectedIndicies =
lstComputerExceptions.getSelectedIndices();
for (int i = tmp.length - 1; i >= 0; i--) {
selectedIndicies = lstComputerExceptions.getSelectedIndices();
model.removeElementAt(selectedIndicies[i]);
}
String computerName = model.toString();
StringTokenizer st = new StringTokenizer(computerName, "[]");

// if (computerName != null) {

// } else {
String tokenizedString = st.nextToken();
String newComputers = tokenizedString.replace(",", "\n");
System.out.println(newComputers);
try {
BufferedWriter out = new BufferedWriter(
new FileWriter(
"C:\\Documents and Settings\\All Users\\Application Data\
\Remote Shutdown\\ExceptionsList.csv",
false));
out.write(newComputers);
out.write("\n");
out.close();
} catch (IOException ex) {
statusBar.setForeground(Color.red);
statusBar
.setText("Failed to modify file. Please ensure the file is not
open");
System.err.println("Unable to delete: " + ex.toString());
}
}
}

I know what the problem is but I am just not sure how I can fix this
issue from happing:

Any help in this matter would be highly appreciated.

Thank you

Sabine Dinis Blochberger

unread,
Jul 14, 2008, 7:18:58 AM7/14/08
to
CBO wrote:

> I am currently developing a java application that reads in a file and
> populates the information inside the data file into a JList. I want
> the user to be able to select an item from the JList and then they are
> able to delete the item which rewrites the new data to the the file
> and repopulates the JList.

<http://java.sun.com/javase/6/docs/api/javax/swing/JList.html>

Just add a check after the removing of an item, if there are any left.

Don't repost this again. Try something different in your code first. If
that doesn't work, then show us.
--
Sabine Dinis Blochberger

Op3racional
www.op3racional.eu

Daniele Futtorovic

unread,
Jul 14, 2008, 7:33:44 AM7/14/08
to

How often have you been posting this now?

You recieved one answer, a while ago, by Sabine Dinis Blochberger, which
addressed the problem that caused the exception. Why did you ignore it?
The reason nobody else replied to you may be that your code is crap.
There are so many weird and seemingly wrong things in it is difficult to
know where to start. That's a critic *and* an explanation.

[Essentially restating what Sabine D.B. wrote:]

1) The *first* item in the exception's StackTrace tells you what went wrong:
> java.util.NoSuchElementException at
> java.util.StringTokenizer.nextToken(Unknown Source)

This means you called StringTokenizer#nextToken() without making sure
there actually *was* a next token. The documentation at
<http://java.sun.com/javase/6/docs/api/> clearly states that if there is
no next token, a NoSuchElementException is thrown.
There is only one call to StringTokenizer#nextToken() in the code you
posted. That is most probably where the error occured.

2)


> String computerName = model.toString();
> StringTokenizer st = new StringTokenizer(computerName, "[]");

It looks as though you are trying to access the model's content through
its toString() representation. This is utter bullshit. As Sabine
indicated, access them directly.

She wrote:
> Rather then convert the model to a string, can't you use something like
>
> ListModel model = myList.getModel();
> for(int i = 0; i < model.getSize(); i++) {
> System.out.println(model.getElementAt(i));
> }
>
> which wouldn't fail (thorw an exception) when the model has no nodes.
> Then you can write an empty file by checking the size.
>
> See <http://java.sun.com/javase/6/docs/api/javax/swing/JList.html>


3) When using Iterators or Enumerations (like StringTokenizer), ALWAYS
check conditionally:
if( stringTokenizer.hasMoreTokens() ){
String s = stringTokenizer.nextToken();
}

4) Please do NOT embed TABs in Usenet posts. As a rule, you should you
an IDE which uses a fixed number of spaces (e.g. four) instead of TABs.

--
DF.
to reply privately, change the top-level domain
in the FROM address from "invalid" to "net"

0 new messages