|
I do have code assist, but for some reason all I got was a compile error, not a hint on how to disable "possible exceptions". I must admit I'm not using the standard Eclipse, but an Eclipse version which is tailored for the Sonic ESB, so maybe there's something in there which prevents it.
And the tips are appreciated, as always.
A good programmer is someone who always looks both ways before crossing a one-way street. (Doug Linder)
|
|
|
|
|
Further to other answers, if a catch-able exception is thrown it must be caught in java. Their are two options, try-catch or use throws so that the calling method knows it could receive the exception and must act accordingly.
If it is a runtime error, say out of memory, then it does not need to be handled as you cannot predict how it will occur and build time.
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
Hi I am having some trouble drawing on a canvas. The code below is a class that makes a small rect of 87x90 pixels and puts it on a panel. The purpose is to display a "tile" that has 8 "lights" that count down. I make several instances of this class that all run at the same time.
When input is received it contains the x and y position and it talks to an instance of this class according to the x and y position.
I instance the class like this:
tile = new TileMaker[9][9];
and:
tile[i][j] = new TileMaker(Integer.toString(tp.topo[i][j]),i,j);
i and j represent x and y.
When running the application I get input from devices with coordinates x and y, which call the ledcountdown1 in the instance of tile[x][y].
My problem is when the animation is running on several instances at the same time. Lets say the instance tile[0][0] is half way counting down and the instance tile[1][1] is called to start its count down, the first instance often resets and follows the count down of the new instance.
Sometimes a previously finished countdown shows 8 lights when a new instance is asked to count down.
I tried to make use of double buffering to fix this bug and at first it seemed to work fine but now I'm getting those annoying effects as before, though it is not as frequent as before.
I hope I make any sense to you guys.. And I apologize for the length of the message..
Any suggestions/comments are greatly appreciated.
Thank you in advance.
public class TileMaker extends JPanel{
private static final long serialVersionUID = 1L;
public static JPanel panel;
public static JLabel label;
public TileCanvas Drawingarea;
public TileMaker(String name, int xpos, int ypos){
}
public JPanel TileCreator(String name){
panel = new JPanel(new BorderLayout());
panel.setName(name);
panel.setPreferredSize(new Dimension(87, 90));
panel.setVisible(true);
Drawingarea = new TileCanvas();
panel.add(Drawingarea,BorderLayout.CENTER);
return panel;
}
}
class TileCanvas extends Canvas {
private static final long serialVersionUID = 345057978247188915L;
public static ArrayList<TileLeds> ledlist;
static String imageFile = "cleartile.jpg";
Image image;
public Timer ledcountdowntimer;
private Timer ledcountdowntimer1;
public int counter = 0;
public boolean isrunning = false;
public boolean gameover = false;
public int myspeed;
private int bwidth;
private int bheight;
private Image bimage;
private Graphics bgraphics;
public TileCanvas() {
super();
ledlist = new ArrayList<TileLeds>();
ledlist.add(new TileLeds(29,18,10,10,Color.BLACK));
ledlist.add(new TileLeds(47,18,10,10,Color.BLACK));
ledlist.add(new TileLeds(60,30,10,10,Color.BLACK));
ledlist.add(new TileLeds(60,48,10,10,Color.BLACK));
ledlist.add(new TileLeds(47,60,10,10,Color.BLACK));
ledlist.add(new TileLeds(29,60,10,10,Color.BLACK));
ledlist.add(new TileLeds(16,48,10,10,Color.BLACK));
ledlist.add(new TileLeds(16,30,10,10,Color.BLACK));
MediaTracker media = new MediaTracker(this);
image = Toolkit.getDefaultToolkit().getImage(imageFile);
media.addImage(image, 0);
try {
media.waitForID(0);
}
catch (Exception e){
}
}
public void ledcountdown1(int speed, final Color color, String command){
if(command == "run"){
if(isrunning == false){
myspeed = speed;
counter = 9;
isrunning = true;
ledcountdowntimer = new Timer();
ledcountdowntimer.schedule(new TimerTask(){
public void run(){
counter--;
for(int g=0; g<8; g++){
ledlist.get(g).setcolor(Color.BLACK);
repaint();
}
if(counter==0){
for(int g=0; g<8; g++){
ledlist.get(g).setcolor(Color.BLACK);
repaint();
}
isrunning = false;
ledcountdowntimer.cancel();
}
else{
for(int n=0;n<counter;n++){
ledlist.get(n).setcolor(color);
repaint();
}
}
}
},0,speed*10);
}
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
resetBuffer();
if(bgraphics!=null){
bgraphics.clearRect(0,0,bwidth,bheight);
paintBuffer(bgraphics);
g.drawImage(bimage,0,0,this);
}
}
private void resetBuffer(){
bwidth=getSize().width;
bheight=getSize().height;
if(bgraphics!=null){
bgraphics.dispose();
bgraphics=null;
}
if(bimage!=null){
bimage.flush();
bimage=null;
}
System.gc();
bimage = createImage(bwidth, bheight);
bgraphics = bimage.getGraphics();
}
public void paintBuffer(Graphics g){
g.drawImage(image, 0, 0 , this);
for(int i=0; i<8; i++){
if(ledlist.get(i).getcolor()!=Color.BLACK){
g.setColor(ledlist.get(i).getcolor());
g.fillOval(ledlist.get(i).getx1(), ledlist.get(i).gety1(), ledlist.get(i).getx2(), ledlist.get(i).gety2());
}
}
}
}
modified on Wednesday, June 29, 2011 6:43 AM
|
|
|
|
|
Sounds like you're using the same instance of Timer multiple times.
- limit the scope of "ledcountdowntimer" to the method "ledcountdown"
- if possible instantiate it anonymous.
- in doubt: Extend the Timer (ledcountdowntimer) and give it a ID (UUID?) to prevent multi use.
regards Torsten
I never finish anyth...
|
|
|
|
|
Hi and thanks for the response.
I tried to move the counters inside the method "ledcountdown". It doesn't seem to have any effect. I still get the effect of color change between instances of tile[][] when a new call to the ledcountdown1 is issued in a different instance of tile[][].
And for some reason color shows up on an instance of tile even though Im not calling ledcountdown in that instance. (I put a print statement inside the ledcountdown method to see if it was being called).
I dont think I can instantiate the timers anonymously because I need to be able to cancel them.
Is it possible to use the same instance of a timer if each one is inside a different instance of the TileMaker class ?
Im not following you with the id, idea.
modified on Tuesday, June 28, 2011 11:26 AM
|
|
|
|
|
do me a favour:
- Set up a custom Timer object aside of your existing code.
- Give the Timer an ID so that you can check whether the same timer object is called to often.
regards Torsten
I never finish anyth...
|
|
|
|
|
I haven't set up the timer like you asked because when changing the ledlist from static my problems got solved. But I had to change the scope of the timers to global within the class because otherwise the timer tasks would not cancel when I asked them to.
Thank you for your suggestions.
|
|
|
|
|
you're welcome. Nice failure.
regards Torsten
I never finish anyth...
|
|
|
|
|
Why is ledlist static? I'm not 100% clear in my mind what you're trying to achieve but if ledlist is static, how do you distinguish the 8 LEDs on canvas 1 from the 8 LEDs on canvas 2?
|
|
|
|
|
Bah that static has no valid reason to be there Oo.. Thanks for pointing that out.
I'll see if this changes anything tomorrow when I connect to the hardware that I'm interacting with.
Thank you.
|
|
|
|
|
Your comment about the static ledlist seems to have done the trick. Random LEDs don't appear any more nor do I see a brief color change when a new tile starts it's countdown.
Thank you very much for pointing me to that damn static =)
|
|
|
|
|
plese tell me the blue j code for tictactoe game
|
|
|
|
|
This is really not a very sensible question. Firstly it is not clear, secondly it implies that you are too lazy to do the most basic research (via Google) for yourself, and thirdly, nobody here is just going to give (or write) a full program for you for nothing.
The best things in life are not things.
|
|
|
|
|
sir actually i have made the code but it is giving so many errors and i have to submit it on 1st of july that is whay i need proggram help and code
|
|
|
|
|
Four days to debug your code. POP!
Panic, Chaos, Destruction. My work here is done.
Drink. Get drunk. Fall over - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
I cannot live by bread alone. Bacon and ketchup are needed as well. - Trollslayer
Have a bit more patience with newbies. Of course some of them act dumb - they're often *students*, for heaven's sake - Terry Pratchett
|
|
|
|
|
Are they compilation errors? Logic errors? The best thing you can do is try to break your code into small logical parts, and try to fix the issues that you've got there.
It's extremely unlikely that anybody here will give you the code you are so desparately after, so you'll just end up wasting valuable time arguing and begging with people here. Save yourself that time, and learn some valuable debugging techniques while you are at it.
|
|
|
|
|
sir actually i have dividied into the function but ther are still problems in logic as well as in compilation plese send me suggation as much fast you can because my computer is going some where else tomarrow
|
|
|
|
|
I know I'm good, but I'm not that good, that out of all of the millions of computers in the world I can narrow my telepathic field to pick the details of the screen that you are looking at.
|
|
|
|
|
|
Ooh. Text speak. Guaranteed to really annoy.
Which bit of people aren't going to write this code for you don't you get? It's not a hard concept; rather than wasting time begging, you should actually be trying to fix your errors. The obvious course of action would be for you to post the sections code that doesn't compile and see if you can get help there, rather than asking us to write the code for you.
Bottom line - only a moron is actually going to give you the code. We are professional programmers who don't appreciate having substandard developers polluting the coding gene-pool, and if we help you pass, we've just helped somebody who doesn't deserve to be a coder.
|
|
|
|
|
Pete O'Hanlon wrote: Ooh. Text speak. Guaranteed to really annoy.
Man, forget helping the OP now, as far as I'm concerned.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
"Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham
|
|
|
|
|
This is homework. We don't do homework. We have jobs to do.
Show us what you've got.
regards Torsten
I never finish anyth...
|
|
|
|
|
|
I need to find an alphanumeric sequence example:1wer3rtyu4sd inside a block of text
to which the alpanumeric sequence is unique.
I am using the following piece of code:
Pattern pattern = Pattern.compile(regex);//need a proper regex
Matcher matcher = pattern.matcher(strLine); //strLine consists the text
if (matcher.find())
{
System.out.println(matcher.group());
System.out.println(matcher.groupCount());
}
|
|
|
|
|
Your question is unclear. Are you searching for a pattern that you already know exactly? If so, use strLine.indexOf(wantedString). If you are doing something selse, you need to tell us more about how to specify the search pattern.
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|