2013-04-20 120 views
0

我已经运行了几个月的Eclipse Indigo,并且遇到了一个我似乎无法找到答案的错误。我正在创建一个类似于马里奥,老塞尔达等的小型2D侧面滚轮游戏。Eclipse Indigo bug

我正要向我的父亲展示我的程序中添加了哪些新功能。我父亲决定不用上楼去看我的电脑上的节目,而是决定用一种我不确定的sudo屏幕查看功能进入它。我们之前已经使用过它,基本上它只是让您看到家中另一台计算机的屏幕(在相同的IP接口上),您也可以使用计算机。

我不想用这种方式向我父亲展示我的节目,所以我告诉他上楼。他做了,从那以后,eclipse不会在你的程序中显示任何JFrame中的图形。它会显示诸如单词(写在屏幕上)等内容,但不会显示任何图形。比如你的背景图片,或者你的角色,或者其他任何东西。我认为这不是我的编码问题,因为在我父亲做屏幕查看之前(我们都在linux mint 12,顺便说一句)之前,我测试过并玩过了好几次游戏。

我认为这个bug与屏幕查看有关。

我会喜欢它,如果我能得到一些帮助。任何一个都会很棒。谢谢。

- 这已经解决了 *

package External; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.*; 

public class Board extends JPanel implements ActionListener, Runnable { 
    Dude p; 
    Image img;  
    Timer time; 
    int v = 172; 
    Thread animator; 

    boolean a = false; 
    boolean done2 = false; 

    public Board() { 
     p = new Dude(); 
     addKeyListener(new AL()); 
     setFocusable(true); 
     ImageIcon i = new ImageIcon ("/home/clark/Desktop/Swindle_test_background.png"); 
     img = i.getImage(); 
     time = new Timer (3, this); 
     time.start(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     p.move(); 
     repaint(); 
    } 
    public void paint(Graphics g) { 
     if (p.dy == 1 && done2 == false) 
     { 
      done2 = true; 
      animator = new Thread(this); 
      animator.start(); 
     } 
     super.paint(g); 
      Graphics2D g2d = (Graphics2D) g; 
    if ((p.getX() - 590) % 2400 == 0) 
     p.nx = 0;  
    if ((p.getX() - 1790) % 2400 == 0) 
     p.nx2 = 0; 
      g2d.drawImage(img, 985-p.nx2, 0, null); 
      if (p.getX() >= 921) 
      g2d.drawImage(img, 985-p.nx, 0, null); 
      g2d.drawImage(p.getImage(), 75, v, null); 


    } 

    private class AL extends KeyAdapter { 
     public void keyReleased(KeyEvent e) { 
      p.keyReleased(e); 
     } 
     public void keyPressed(KeyEvent e) { 
      p.keyPressed(e); 
     } 

    } 
    boolean h = false; 
    boolean done = false; 

    public void cycle() { 
     if (h == false) 
       v--; 
     if (v == 125) 
       h = true; 
     if (h == true && v <= 172) { 
       v++; 
     if (v == 172) { 
        done = true; 

     } 
    } 
} 




    public void run() { 

     long beforeTime, timeDiff, sleep; 

     beforeTime = System.currentTimeMillis(); 

     while (done == false) { 

       cycle(); 

       timeDiff = System.currentTimeMillis() - beforeTime; 
       sleep = 10 - timeDiff; 

       if (sleep < 0) 
         sleep = 2; 
       try { 
         Thread.sleep(sleep); 
       } catch (InterruptedException e) { 
         System.out.println("interrupted"); 
       } 

       beforeTime = System.currentTimeMillis(); 
     } 
     done = false; 
     h = false; 
     done2 = false; 
} 

} 

哥们

package External; 

import java.awt.Image; 
import java.awt.event.KeyEvent; 

import javax.swing.ImageIcon; 

public class Dude { 
    int x, dx, y, nx2, nx, dy; 
    Image Swindle_Man_Right; 
    ImageIcon r = new ImageIcon("/home/clark/Desktop/Swindle_Man_Right.png"); 
    ImageIcon l = new ImageIcon("/home/clark/Desktop/Swindle_Man_Left.png"); 
    ImageIcon j = new ImageIcon("/home/clark/Desktop/Swindle_Man_Jump.png"); 

    public Dude() { 
     Swindle_Man_Right = l.getImage(); 
     x = 75; 
     nx2 = 685; 
     nx = 0; 
     y = 172; 

} 


public void move() { 
    x = x + dx; 
    nx2 = nx2 + dx; 
    nx = nx + dx; 
} 
public int getX() { 
    return x; 
} 
public int getY() { 
    return y; 
} 

public Image getImage() { 
    return Swindle_Man_Right; 
} 

public void keyPressed(KeyEvent e) { 
    int key = e.getKeyCode(); 
    if (key == KeyEvent.VK_LEFT) 
    {    dx = -1; 
    Swindle_Man_Right = l.getImage(); 
      } 
    if (key == KeyEvent.VK_RIGHT) 
      {dx = 1; 
    Swindle_Man_Right = r.getImage(); 
      } 

    if (key == KeyEvent.VK_UP) 
      {dy = 1; 
      Swindle_Man_Right= j.getImage(); 
      }      } 

public void keyReleased(KeyEvent e) { 
    int key = e.getKeyCode(); 

    if (key == KeyEvent.VK_LEFT) 
      dx = 0; 

    if (key == KeyEvent.VK_RIGHT) 
      dx = 0; 

    if (key == KeyEvent.VK_UP) 
      {dy = 0; 
      Swindle_Man_Right= r.getImage();} 
      } 
} 

框架

package External; 

import javax.swing.*; 

public class Frame { 

    public Frame() { 
     JFrame frame = new JFrame("Swindle [version 0.1.9]"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(700,390); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
    public static void main(String[] args) { 
     new Frame(); 
} 

} 

回答

1

就我所知,你没有添加任何内容。

我更换了显卡,拥有我自己的,我能得到它运行...

enter image description here

public class Frame { 

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

    public Frame() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Swindle [version 0.1.9]"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       // This is kind of important... 
       frame.add(new Board()); 

       frame.setSize(700, 390); 
       frame.setResizable(false); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

虽然我只给出代码一瞥,我会建议您不使用ImageIcon加载图像,而是使用ImageIO API。除了支持更多的图像格式之外,它在无法加载图像时会抛出更多的错误。

我也避免使用KeyListener转而使用key bindings。他们不会遭受与KeyListener

+0

**相同​​的焦点问题**非常感谢** MadProgrammer!事实证明,这是我的编码问题,尽管我对自己肯定不是。我想这意味着我应该更加开放自己的想法。您添加到我的** Frame **类中的内容使我的程序再次运行良好。你应得的饼干为你的惊人回应! – user2278779 2013-04-20 04:28:55