2014-08-30 57 views
1

我所有的代碼dissappear到目前爲止,編譯罰款,但隨機播放按鈕,使所有的卡dissappear程序洗牌卡,當我擊中洗牌按鈕,卡上的GUI窗口

import java.util.Random; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.*; 
import javafx.scene.control.Button; 
import javafx.geometry.Pos; 

public class P6 extends Application 
{ 
    public static final int ASIZE = 54; 
    public static final int ROWS = 6; 
    public static final int COLS = 9; 

    public void start(Stage primaryStage) 
    { 
     int aCardDeck[] = new int[ASIZE];  //54 cards in a deck 
     for(int i = 0 ; i < ASIZE ; i++) //ASIZE is 54 
     aCardDeck[i] = i + 1;  //populate with elements 1-54 

     GridPane gPane = new GridPane();  //Instantiate Grid for cards in rows/cols 

     for(int i = 0, k = 0 ; i < ROWS && k < ASIZE; i++) //6 rows, 9 columns 
      for(int j = 0; j < COLS ; j++) 
      gPane.add(new ImageView("image/card/" + aCardDeck[k++] + ".png"),j,i); 



     Button btShuffle = new Button("Shuffle"); 
     btShuffle.setOnAction 
     (e ->     // Lamda Event Handler 
     {     // Like anonymous inner class 
     int r, c, n; 
     shuffle(aCardDeck);  // Random shuffle 
     gPane.getChildren().clear(); 
     for (r = n = 0; r < ROWS && n < ASIZE; r++) 
     for (c = 0; c < COLS ; c++) 
     gPane.add(new ImageView("~/../public/image/card/" + aCardDeck[n++] 
     + ".png"),c,r); 
     } 
     ); 

     HBox hBox = new HBox(5);   // Row of buttons 
     hBox.getChildren().add(btShuffle); // Add button to box 


     BorderPane pane = new BorderPane(); 
     pane.setCenter(gPane);   // Layout rows of cards in center 
     pane.setBottom(hBox);   // Layout buttons at bottom 
     BorderPane.setAlignment(hBox, Pos.CENTER); 
     Scene scene = new Scene(pane, 650, 600); // Create scene, place in stage 
     primaryStage.setTitle("P6");  // Set the stage title 
     primaryStage.setScene(scene);  // Place the scene in the stage 
     primaryStage.show();   // Display the stage 
     } 

    public void ascendSort (int [] a){} 
    public void descendSort (int [] a){} 
    public void ascendRankSort (int [] a){} 
    public void descendRankSort (int [] a){} 

    public void shuffle(int [] a){ 
     int r, tmp; 
     Random rand = new Random(); 
     long seed = System.currentTimeMillis(); 
     rand.setSeed(seed); 
     for(int i = 0 ; i < ASIZE ; i++){ 
     r = rand.nextInt(ASIZE); 

     tmp = a[r]; 
     a[r] = a[i]; 
     a[i] = tmp; 
} 
} 
    public static void main(String[] arg`enter code here`s) 
    { 
    launch(args); 
    } 
} 

的錯誤信息: 線程「JavaFX Application Thread」中的異常java.lang.IllegalArgumentException:無效的URL:未找到無效的URL或資源 at javafx.scene.image.Image.validateUrl(Image.java:1094) at javafx.scene.image。 (Image.java:598) at javafx.scene.image.ImageView。(ImageView.java:164) at P6.lambda $ start $ 0(P6.java:39) 在P6 $$ LAMBDA $ 1/16273898.handle(未知來源) 在com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 在com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager的.java:238) 在com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 在com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 在的com.sun .javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 在com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher .java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event。 EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:204) at javafx.scene.Node.fireEvent(Node.java:8175) at javafx.scene.control.Button.fire(Button.java:185) at com.sun.javafx.scene.control.sbeam.beva iorSkinBase $ 1.handle(BehaviorSkinBase.java:96) at com.sun.javafx.scene.control.skin.BehaviorSkinBase $ 1.handle(BehaviorSkinBase.java:89) at com.sun.javafx.event.CompositeEventHandler $ NormalEventHandlerRecord。 handleBubblingEvent(CompositeEventHandler.java:218) 在com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 在com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 在com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher。 dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event。 EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent( Event.java:204) at javafx.scene.Scene $ MouseHandler.process(Scene。java:3746) at javafx.scene.Scene $ MouseHandler.access $ 1800(Scene.java:3471) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695) at javafx.scene.Scene $ ScenePeerListener.mouseEvent (Scene.java:2486) at com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run(GlassViewEventHandler.java:314) at com.sun.javafx.tk.quantum.GlassViewEventHandler $ MouseEventNotification.run(GlassViewEventHandler .java:243) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345) at com.sun.glass.ui。java.security.AccessController.doPrivileged(Native Method) 。 View.handleMouseEvent(View.java:526) at com.sun.glass.ui.View.notifyMouse(View.java:898) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.access $ 200(GtkApplication.java:48) at com.sun.glass。 ui.gtk.GtkApplication $ 6 $ 1.run(GtkApplication.java:149) at java.lang.Thread.run(Thread.java:745) 引起:java.lang.IllegalArgumentException:無效的URL或資源未找到 at javafx.scene.image.Image.validateUrl(Image.java:1086) ... 50更多

回答

0

好吧,我想我有一個答案,但我沒有測試它,所以我不知道。

但我相信你的問題是編碼不一致。

這裏是您使用之初,以填補gPane行:

gPane.add(new ImageView("image/card/" + aCardDeck[k++] + ".png"),j,i); 

這裏是你後,你使用的線路隨機:

gPane.add(new ImageView("~/../public/image/card/" + aCardDeck[n++] 
     + ".png"),c,r); 

我想您所遇到的問題是,public/image/card是錯誤的道路,你需要改變它,使之成爲你擁有的另一條道路。此外,我會使它成爲refresh方法,而不是在任何地方複製該行代碼。因此,每次更改數組而不是複製+粘貼gPane.add(...)時,都會調用refresh方法。