2013-04-20 118 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