Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > I need a different approach - suggestions please

Reply
Thread Tools

I need a different approach - suggestions please

 
 
Gene Wirchenko
Guest
Posts: n/a
 
      06-28-2012
On Wed, 27 Jun 2012 22:28:23 -0400, Hydrangea
<(E-Mail Removed)> wrote:

>On 27/06/2012 10:14 PM, Gene Wirchenko wrote:
>> On Wed, 27 Jun 2012 21:28:48 -0400, Arne Vajh°j <(E-Mail Removed)>
>> wrote:
>>
>> [snip]
>>
>>> But since the rest of the world does not then that is a bad
>>> choice.

>>
>> Or I am on the bleeding edge.
>>
>> At one point, presumably only one person (or only a few) was
>> using the Java coding conventions so highly touted here. Therefore,
>> by your argument, said conventions were a bad choice.

>
>"...therefore, all progress depends upon the unreasonable man".


I am doing my best.

The assymetry of the situation is interesting to me. I do not
like the standard Java coding conventions for <reasons>, but I would
not dream of telling someone not to use them. The other side is very
insistent that I should and must. I do insist that someone have
coding conventions, but it is less important what they are. I can
adapt if I have to, but of course, I prefer my own conventions as they
match my needs.

Sincerely,

Gene Wirchenko
 
Reply With Quote
 
 
 
 
Gene Wirchenko
Guest
Posts: n/a
 
      06-28-2012
On Wed, 27 Jun 2012 22:32:47 -0400, Arne Vajh°j <(E-Mail Removed)>
wrote:

>On 6/27/2012 10:14 PM, Gene Wirchenko wrote:
>> On Wed, 27 Jun 2012 21:28:48 -0400, Arne Vajh°j <(E-Mail Removed)>
>> wrote:
>>
>> [snip]
>>
>>> But since the rest of the world does not then that is a bad
>>> choice.

>>
>> Or I am on the bleeding edge.
>>
>> At one point, presumably only one person (or only a few) was
>> using the Java coding conventions so highly touted here. Therefore,
>> by your argument, said conventions were a bad choice.

>
>No.
>
>If there are no standard you invent a standard.
>
>If there are a standard you follow it.


Maybe you do that, but I do not. I evaluate a standard for how
well it fits my needs. I make no bones about disregarding a standard
that does not work for me.

Standards for written English work very well for me. There are a
number of errors in your post. Please submit a corrected post, or
quit whining about standards. Or both.

Sincerely,

Gene Wirchenko
 
Reply With Quote
 
 
 
 
bilsch
Guest
Posts: n/a
 
      06-28-2012
On 6/27/2012 6:54 PM, Lew wrote:
> bilsch wrote:
>> Lew wrote:
>>> There are a few mistakes in your code.
>>>
>>> You don't need to call 'super()' in the constructor explicitly.
>>> That's what happens by default anyway.
>>>
>>> You called the constructor directly from the 'main()' routine. That means
>>> you called it from the primary thread of the program. You don't know this
>>> yet, probably, unless you've already studied concurrency in Java a little bit.
>>>
>>> The problem is that the GUI won't work right if you do that. You have to
>>> move GUI actions onto the "Event Dispatch Thread" (EDT), a background
>>> thread that the system creates to handle all GUI actions.
>>>
>>> Also, you start all the action from the constructor. That's bad. As its name
>>> implies, a constructor's purpose is to _construct_ an object, not run its logic.
>>> Run the logic after construction completes and the instance is no longer in a
>>> partially-built state.
>>>
>>> And make your indentation consistent with the Java coding conventions (available
>>> on line).
>>>
>>> So all together, you'd do something like:
>>>
>>> public static void main(String[] arguments) {
>>> java.awt.EventQueue.invokeAndWait( new Runnable() {
>>> @Override public void run() {
>>> CalcGUIQ1 calculator = new CalcGUIQ1();
>>> calculator.setVisible(true);
>>> }
>>> });
>>> }

>>
>> With help I've gotten some errors out of the program but I have reached
>> a point where something just won't work how it should. Your comments

>
> What doesn't work, and how should it?
>
>> here lead me to believe the reason is the basic way I have things laid
>> out. But I don't know how to:
>>
>> > move GUI actions onto the "Event Dispatch Thread" (EDT), further I

>> dont know how to write an EDT, or what specifically are 'GUI actions' as
>> opposed to other lines that relate to the GUI.

>
> You don't write the EDT. Did you read the tutorial link I provided?
>
> <http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html>
>
> GUI actions are all things that happen on the GUI, such as creating
> a 'JFrame', calling 'pack()', playing with 'Graphics', or anything else that
> is part of the GUI. Non-GUI actions are things like writing files, calculating
> values, updating the logical model, or anything else that is not part of
> the GUI.
>
> Do please read the tutorial to which I linked. There's a reason I provided
> that link.
>
>
>> Also, I thought the stuff I have in the constructor belonged there.

>
> Not all of it. The program itself must run from a *completely*
> constructed object. You start the program from inside the
> constructor, therefore it is running on an *incompletely*
> constructed object.
>
>> I dont know where to call the constructor from if not from 'main'.

>
> You should call the constructor from 'main()', provided you properly
> guard it inside the 'invokeAndWait()' call.
>
> Why did you think I recommended otherwise?
>
>> I did some reading about threads being unsafe.
>>
>> It would be very helpful to me if you could show how to rearrange the
>> code like you say would be better. If you have the time, it would be
>> very helpful. Thanks.

>
> What was wrong with what I already showed you (and you quoted)?
>


I looked at the link when you provided it. It said dont read this until
you first read the basic stuff about concurrence in previous topics. I
read that stuff.

Here's the code that should work but doesnt. A stripped down version of
my program is in the 2 files copied below. It is a simple calculator
like in Windows accessories. The example below only does addition and
subtraction. It isn't completely written - never writes the answer to
the textbox I haven't got that far yet. The code below is supposed to
work as follows: A number is sent to the textbox using button clicks and
when '+' button is clicked the displayed string is converted to double.
The displayed string remains displayed until the first digit of the next
number is entered then the displayed string is cleared and the second
number begins in the display. When '=' is clicked the second displayed
number (actually a string) is converted to double and added to the first
double number. The operation should be controlled by the 'opFlag' and
'addFlag' settings. It should clear the textbox when the second number
is entered but it does not. Print statements are included to show
variable values.

THE GUI FILE:

import java.awt.*;
import javax.swing.*;

public class KalcGUI extends JFrame {
Krunch crunchNu = new Krunch(this);

// set up row 1
JPanel row1 = new JPanel();
JTextField number1 = new JTextField(30);
// set up row 2
JPanel row2 = new JPanel();

JButton sev = new JButton("7");
JButton ate = new JButton("8");
JButton nin = new JButton("9");

JButton fou = new JButton("4");
JButton fiv = new JButton("5");
JButton six = new JButton("6");
JButton b04 = new JButton("");

JButton one = new JButton("1");
JButton two = new JButton("2");
JButton tre = new JButton("3");

JButton zro = new JButton("0");
JButton dot = new JButton(".");
JButton equ = new JButton("=");
JButton add = new JButton("+");
JButton sub = new JButton("--");

public KalcGUI() {
super();
setTitle("Calculator");
//setLookAndFeel();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(2, 1, 10, 10);
setLayout(layout);

//add listeners
dot.addActionListener(crunchNu);
zro.addActionListener(crunchNu);
one.addActionListener(crunchNu);
two.addActionListener(crunchNu);
tre.addActionListener(crunchNu);
fou.addActionListener(crunchNu);
fiv.addActionListener(crunchNu);
six.addActionListener(crunchNu);
sev.addActionListener(crunchNu);
ate.addActionListener(crunchNu);
nin.addActionListener(crunchNu);
equ.addActionListener(crunchNu);
add.addActionListener(crunchNu);
sub.addActionListener(crunchNu);


FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
row1.add(number1);
row1.setLayout(layout1);
add(row1);

GridLayout layout2 = new GridLayout(5, 3, 10, 10);
row2.setLayout(layout2);

row2.add (sev);
row2.add (ate);
row2.add (nin);

row2.add (fou);
row2.add (fiv);
row2.add (six);

row2.add (one);
row2.add (two);
row2.add (tre);


row2.add (zro);
row2.add (dot);
row2.add (equ);
row2.add (add);
row2.add (sub);
add(row2);

pack();
setVisible(true);
}
public static void main(String[] arguments) {
KalcGUI frame = new KalcGUI();

}
}


THE CALCULATION FILE:


import javax.swing.*;
import java.awt.event.*;

public class Krunch implements ActionListener{
KalcGUI gui;
String strng1 = "";
boolean invFlag = false;
boolean addFlag = false;
boolean subFlag = false;
boolean opFlag = false;
int neg = 0;
String noChar = "";
Double operand1 = 0.0;
Double operand2 = 0.0;
public Krunch(KalcGUI in) {
gui = in;
}
public void actionPerformed(ActionEvent event){
//String strng1 = "";
String btn = event.getActionCommand();
// opflag clears display
if (opFlag){
System.out.println(opFlag);

// THIS SHOULD CLEAR THE TEXTBOX //
gui.number1.setText(noChar);
opFlag = false;
}
if (btn == "=") {operand2=Double.parseDouble(strng1);
if (addFlag) {
operand1 += operand2;
addFlag = false;
}
if (subFlag) {
operand1 += operand2;
subFlag = false;
}
}
if( btn.equals( "1" ) || btn.equals( "2" ) || btn.equals( "3" )
|| btn.equals( "4" )
|| btn.equals( "5" ) || btn.equals( "6" ) ||
btn.equals( "7" ) || btn.equals( "8" )
|| btn.equals( "9" ) || btn.equals( "0" ) ||
btn.equals( "." )) {

strng1 += btn;
}
gui.number1.setText(strng1);

if (btn == "+") {
addFlag = true;
opFlag = true;
System.out.println(addFlag);
System.out.println(opFlag);
operand1=Double.parseDouble(strng1);}

if (btn == "--") {
subFlag = true;
opFlag = true;
operand1=Double.parseDouble(strng1);}

}
}
 
Reply With Quote
 
Mike Winter
Guest
Posts: n/a
 
      06-28-2012
On Thursday, June 28, 2012 12:02:48 PM UTC+1, bilsch wrote:

> Here's the code that should work but doesnt. [snip]


I did outline why it doesn't in your other thread, "It doesn't see my 'if' statements". In addition to the other issues raised in both threads, your program suffers from logic errors which you don't seem to have addressed yet.. See <news_sGr.321702$(E-Mail Removed)4> posted yesterday (27th) at 01:04 GMT.

Kind regards,
Mike
 
Reply With Quote
 
markspace
Guest
Posts: n/a
 
      06-28-2012
On 6/28/2012 4:02 AM, bilsch wrote:

> if( btn.equals( "1" ) || btn.equals( "2" ) || btn.equals( "3" )
> || btn.equals( "4" )
> || btn.equals( "5" ) || btn.equals( "6" ) || btn.equals(
> "7" ) || btn.equals( "8" )
> || btn.equals( "9" ) || btn.equals( "0" ) || btn.equals(
> "." )) {



Wow, you actually changed it. Good job.

I have to say that I like ".0123456789".contains( btn ) better. It's
much shorter.


> if (btn == "+") {


You really do need to change all of the other string comparisons to
..equals() too. This == stuff is going to fail unpredictably for you.
It tests for object identity (i.e., to objects are the same object) and
is only going to succeed for strings by luck at this point. .equals()
checks that the contents of the string are the same.

I'll stop there because any other errors might be masked by these ==
comparisons for strings.

 
Reply With Quote
 
markspace
Guest
Posts: n/a
 
      06-28-2012
On 6/28/2012 4:55 AM, Mike Winter wrote:
> to have addressed yet. See <news_sGr.321702$(E-Mail Removed)4>
> posted yesterday (27th) at 01:04 GMT.



That link is completely mangled for me.
 
Reply With Quote
 
Mike Winter
Guest
Posts: n/a
 
      06-28-2012
On Thursday, June 28, 2012 3:33:07 PM UTC+1, markspace wrote:
> On 6/28/2012 4:55 AM, Mike Winter wrote:
> > to have addressed yet. See <news_sGr.321702$(E-Mail Removed)4>
> > posted yesterday (27th) at 01:04 GMT.

>
>
> That link is completely mangled for me.


It's the message ID for the post I wrote, but I know some news readers won't act on it properly. Hell, I might've written it incorrectly as it's been a long time since I used Usenet regularly. But that's why I mentioned the name of the thread, and the date and time of the post.

Mike
 
Reply With Quote
 
markspace
Guest
Posts: n/a
 
      06-28-2012
On 6/28/2012 8:45 AM, Mike Winter wrote:
> It's the message ID for the post I wrote, but I know some news
> readers won't act on it properly. Hell, I might've written it
> incorrectly as it's been a long time since I used Usenet regularly.
> But that's why I mentioned the name of the thread, and the date and
> time of the post.



Here's a link using Google, which might work for more folks:

<https://groups.google.com/d/msg/comp.lang.java.programmer/QNe2-BxD_8A/3L6ld8jBGJwJ>


 
Reply With Quote
 
Gene Wirchenko
Guest
Posts: n/a
 
      06-28-2012
On Thu, 28 Jun 2012 07:33:07 -0700, markspace <-@.> wrote:

>On 6/28/2012 4:55 AM, Mike Winter wrote:
>> to have addressed yet. See <news_sGr.321702$(E-Mail Removed)4>
>> posted yesterday (27th) at 01:04 GMT.


>That link is completely mangled for me.


It works for me in Agent. It switched me over to the other
thread. I tried the link in the post you replied to and your post,
and both worked.

Sincerely,

Gene Wirchenko
 
Reply With Quote
 
Joshua Cranmer
Guest
Posts: n/a
 
      06-28-2012
On 6/28/2012 10:33 AM, markspace wrote:
> On 6/28/2012 4:55 AM, Mike Winter wrote:
>> to have addressed yet. See <news_sGr.321702$(E-Mail Removed)4>
>> posted yesterday (27th) at 01:04 GMT.

>
>
> That link is completely mangled for me.


Thunderbird doesn't properly support news URIs that don't specify a
server. It's been on my todo list for years now.

--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Best approach to use different datasources - ? alexandis@gmail.com ASP .Net 10 11-06-2007 03:31 PM
Suggestions for how to approach this problem? John Salerno Python 13 05-10-2007 06:26 PM
MenuItems point to two different forms, what is best approach kbutterly ASP .Net 2 01-18-2007 01:03 PM
BC30466: Namespace or type cannot be found - different approach! sorCrer ASP .Net 1 01-19-2005 03:22 PM
Encrypt String or different approach Gary Townsend (Spatial Mapping Ltd.) ASP .Net 4 11-09-2004 11:36 PM



Advertisments