2016-10-04 13 views
0

this botをソースコードからコンパイルしようとしています。しかし、私はいくつかのエラーに出くわしました。ローカル変数からローカル変数にアクセスし、最終的に宣言する必要があります

Information:Using javac 1.8.0_101 to compile java sources 
Information:java: Errors occurred while compiling module 'BumpBot2' 
Information:4/10/2016 10:27 PM - Compilation completed with 18 errors and 0 warnings in 1s 297ms 
C:\Users\gabri\Desktop\BumpBot2\src\com\achow101\bumpbot\BumpBot.java 
Error:(138, 30) java: local variable urlTextField is accessed from within inner class; needs to be declared final 
Error:(139, 35) java: local variable bumpTextTextField is accessed from within inner class; needs to be declared final 
Error:(144, 25) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(145, 25) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(149, 21) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(150, 21) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(172, 21) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(173, 21) java: local variable errorText is accessed from within inner class; needs to be declared final 
Error:(253, 39) java: local variable grid is accessed from within inner class; needs to be declared final 
Error:(256, 17) java: local variable urlTextField is accessed from within inner class; needs to be declared final 
Error:(257, 17) java: local variable bumpTextTextField is accessed from within inner class; needs to be declared final 
Error:(291, 64) java: local variable entry is accessed from within inner class; needs to be declared final 
Error:(303, 17) java: local variable grid is accessed from within inner class; needs to be declared final 
Error:(303, 43) java: local variable entryUrlLbl is accessed from within inner class; needs to be declared final 
Error:(304, 17) java: local variable grid is accessed from within inner class; needs to be declared final 
Error:(304, 43) java: local variable entryBumpTextLbl is accessed from within inner class; needs to be declared final 
Error:(305, 17) java: local variable grid is accessed from within inner class; needs to be declared final 
Error:(305, 43) java: local variable delBtn is accessed from within inner class; needs to be declared final 

彼らはすべて同じファイル、BumpBot.javaに関連している - 私がコンパイルしようとしたとき

それは私にこれらのエラーを与えました。 開発者は、私が使用し、100%働いている作業用の.jarファイルも提供しています。それを逆コンパイルすると、BumpBot.javaの出力はまったく同じものになります。

何が間違っているのか分かりません。私はすべての変数をfinalとして定義しようとしましたが、ほとんどのエラーは修正されましたが、entrygridに関する変数に関して4つの解析エラーが残っています。

Javaインストールが壊れていますか?

[時間]

EDIT: これは、問題のコードです。それは長いです、ここで私と一緒にいてください。

public class BumpBot extends Application { 

    private int gridHeight = 0; 
    private static DoBumps doBumps = new DoBumps(); 
    private static Thread t = new Thread(doBumps); 

    public static void main(String[] args) 
    { 
     // Start do bumps thread 
     t.start(); 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception 
    { 

     // Set GUI Title 
     primaryStage.setTitle("Bitcointalk Thread Bump Bot"); 

     // Create grid for entries 
     GridPane grid = new GridPane(); 
     grid.setAlignment(Pos.TOP_CENTER); 
     grid.setHgap(10); 
     grid.setVgap(10); 
     grid.setPadding(new Insets(25, 25, 25, 25)); 

     // URL Heading lable 
     Label urlLbl = new Label("Bitcointalk URL"); 
     grid.add(urlLbl, 0, 0); 

     // New entry url textfield 
     TextField urlTextField = new TextField(); 
     urlTextField.setPrefWidth(300); 
     grid.add(urlTextField, 0, 1); 
     gridHeight++; 

     // Bump Text heading label 
     Label bumpTextLbl = new Label("Bump Text"); 
     grid.add(bumpTextLbl, 1, 0); 

     // New entry bump text textfield 
     TextField bumpTextTextField = new TextField(); 
     bumpTextTextField.setPrefWidth(300); 
     grid.add(bumpTextTextField, 1, 1); 

     // Button to add entry 
     Button addBtn = new Button("Add Bump Entry"); 
     grid.add(addBtn, 2, 1); 

     // Error text 
     Text errorText = new Text(); 
     grid.add(errorText, 1, 2); 
     gridHeight += 2; 

     // Populate the grid with pre-existing entries 
     // Open a database connection 
     // (create a new database if it doesn't exist yet): 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("bumps.odb"); 
     EntityManager em = emf.createEntityManager(); 

     // Get the next thread to bump 
     CriteriaBuilder cb = em.getCriteriaBuilder(); 
     CriteriaQuery<BumpEntry> qNextBump = cb.createQuery(BumpEntry.class); 
     Root<BumpEntry> bump = qNextBump.from(BumpEntry.class); 
     qNextBump.select(bump); 
     TypedQuery<BumpEntry> query = em.createQuery(qNextBump); 
     List<BumpEntry> bumpList = query.getResultList(); 
     for (BumpEntry entry : bumpList) 
     { 
      addEntryToGrid(entry, grid); 
     } 

     // Close the database connection: 
     em.close(); 
     emf.close(); 

     // Add the entry when clicked 
     addBtn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent e) { 
       // Get the data from the form 
       String url = urlTextField.getText(); 
       String bumpText = bumpTextTextField.getText(); 

       // Check the URL 
       try { 
        if (!url.substring(0, 40).equals("https://bitcointalk.org/index.php?topic=")) { 
         errorText.setFill(Color.RED); 
         errorText.setText("Incorrect URL"); 
         return; 
        } 
       } catch (StringIndexOutOfBoundsException e1) { 
        errorText.setFill(Color.RED); 
        errorText.setText("Incorrect URL"); 
        return; 
       } 

       // Trim the URL to just the topic 
       String trimUrl = url.substring(0, 40); 
       int dotIndex = url.indexOf(".", 40); 
       trimUrl += url.substring(40, dotIndex); 
       trimUrl += ".0"; 

       // Escape the bump text 
       //escapeInput(bumpText); 

       // Open a database connection 
       // (create a new database if it doesn't exist yet): 
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("bumps.odb"); 
       EntityManager em = emf.createEntityManager(); 

       // Check that the thread is not already being bumped 
       BumpEntry bEntry = em.find(BumpEntry.class, trimUrl); 
       if (bEntry != null) 
       { 
        errorText.setFill(Color.RED); 
        errorText.setText("Thread already being bumped"); 
        return; 
       } 

       // Create the entry 
       BumpEntry entry = new BumpEntry(trimUrl, bumpText, 0); 

       // Check the date of the last post 
       try { 
        // Get the first page of the thread 
        Document threadFirstPage = Jsoup.connect(url).get(); 

        // Get the navpages elements 
        Element headerNavBar = threadFirstPage.select("div[id=bodyarea] > table[width=100%][cellspacing=0][cellpadding=0][border=0]").first(); 
        Elements headerNavPages = headerNavBar.select("tr > td.middletext > a.navPages"); 

        // Get the page if there is only one page of posts 
        if (headerNavPages.size() == 0) { 
         headerNavPages = headerNavBar.select("tr > td.middletext > b"); 
        } 

        // Get the last page and calculate url number 
        Element lastPage = headerNavPages.last(); 
        int pages = Integer.parseInt(lastPage.text()); 
        int urlNum = (pages - 1) * 20; 

        // Create the URL for the last page 
        String lastPageUrl = url.substring(0, url.length() - 1); 
        lastPageUrl += urlNum; 

        // Get the last page of the thread 
        Document threadLastPage = Jsoup.connect(lastPageUrl).get(); 

        // Get the last post in thread 
        Element postTable = threadLastPage.select("table[cellpadding=0][cellspacing=0][border=0][width=100%].bordercolor > tbody").first(); 
        Element firstPost = postTable.select("tr").first(); 
        String postClass = firstPost.className(); 
        Elements posts = postTable.select("tr." + postClass); 
        Element lastPost = posts.last(); 

        // Get the date of last post 
        Element headerAndPost = lastPost.select("td.td_headerandpost").first(); 
        Element dateAndSubj = headerAndPost.select("table > tbody > tr > td[valign=middle]").get(1); 
        Element dateElem = dateAndSubj.select("div.smalltext").first(); 
        String dateStr = dateElem.text(); 

        // Parse date string and get unix timestamp 
        SimpleDateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy, hh:mm:ss a"); 
        fmt.setTimeZone(TimeZone.getTimeZone("UTC")); 
        Date date; 
        if (dateStr.contains("Today")) { 
         date = new Date(); 
         String currentDateStr = fmt.format(date); 
         dateStr = dateStr.replace("Today at", currentDateStr.substring(0, currentDateStr.lastIndexOf(",") + 1)); 
        } 
        date = fmt.parse(dateStr); 
        long unixtime = date.getTime()/1000; 
        entry.setTime(unixtime); 


       } catch (Exception e2) { 
        e2.printStackTrace(); 
       } 

       // add entry to db 
       em.getTransaction().begin(); 
       em.persist(entry); 
       em.getTransaction().commit(); 

       // Notify the bumping thread 
       synchronized (doBumps) 
       { 
        doBumps.notify(); 
       } 

       // Close the database connection: 
       em.close(); 
       emf.close(); 

       // Add the entry to display 
       addEntryToGrid(entry, grid); 

       // Clear textfields 
       urlTextField.clear(); 
       bumpTextTextField.clear(); 
      } 
     }); 

     Scene scene = new Scene(grid, 1000, 800); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public void addEntryToGrid(BumpEntry entry, GridPane grid) 
    { 
     // Thread URL 
     TextField entryUrlLbl = new TextField(); 
     entryUrlLbl.setText(entry.getUrl()); 
     entryUrlLbl.setEditable(false); 

     // Bump Text 
     TextField entryBumpTextLbl = new TextField(); 
     entryBumpTextLbl.setText(entry.getBumpText()); 
     entryBumpTextLbl.setEditable(false); 

     // Delete button 
     Button delBtn = new Button("Remove"); 
     final int row = gridHeight; 
     delBtn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 

       // Open a database connection 
       // (create a new database if it doesn't exist yet): 
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("bumps.odb"); 
       EntityManager em = emf.createEntityManager(); 

       // Get the entry to be deleted 
       BumpEntry bumpEntry = em.find(BumpEntry.class, entry.getUrl()); 

       // Remove entry from db 
       em.getTransaction().begin(); 
       em.remove(bumpEntry); 
       em.getTransaction().commit(); 

       // Close the database connection: 
       em.close(); 
       emf.close(); 

       // Clear this row's grid 
       grid.getChildren().remove(entryUrlLbl); 
       grid.getChildren().remove(entryBumpTextLbl); 
       grid.getChildren().remove(delBtn); 

       // Notify the bumping thread 
       synchronized (doBumps) 
       { 
        doBumps.notify(); 
       } 
      } 
     }); 

     // Add to display 
     grid.add(entryUrlLbl, 0, gridHeight); 
     grid.add(entryBumpTextLbl, 1, gridHeight); 
     grid.add(delBtn, 2, gridHeight); 
     gridHeight++; 
    } 

    @Override 
    public void stop() 
    { 
     System.exit(0); 
    } 

    public String escapeInput(String input) { 
     String[] characters = {"\"", "\\", "{", "}"}; 
     StringBuilder sb = new StringBuilder(); 
     sb.append("\""); 
     String line = input; 
     for (String test : characters) { 
      line = line.replace(test, "\\" + test); 
     } 
     sb.append("\""); 
     return sb.toString(); 
    } 
} 
+0

この質問にはコードはありません。 –

+0

Dohは編集を許可します。申し訳ありません、私は本当に疲れています。 –

+1

** 18個のコンパイラエラー**はほとんど問題ありません。それらをすべて「最終的」にすることは、これをすべて修正するべきです。 'entry'と' grid'のためにうまくいかなかったら、あなたは 'final'にしませんでした。 '-source 1.7'以下を使用している必要があります。ここでバンピングはありません。 – EJP

答えて

-1

スレシュアッタは、Java SE 8で始まる...ここDifference between final and effectively final

で言うように、ローカルクラスは、最終的または効果的に最終的なもので囲むブロックのローカル変数やパラメータにアクセスすることができます。 値が初期化された後に決して変更されない変数またはパラメータは、実質的に最終的です。

Java8に依存していない場合は、Java7でコンパイルできます。

+0

JDK 1.7.0_80をインストールしてSDKをIDEに変更しました。違いはなく、まだコンパイルエラーがあります。 –

関連する問題