1

私はパートナーと一緒に Java 関連プロジェクトのコードに取り組んでいますが、彼がコードを送ってきたとき、何も正しく動作していませんでした。私はこの質問を、2 つの異なる Eclipse 環境からのコードの転送に関連するすべてのものに広げています。私たちは両方とも1.6を実行していると思います。

プログラム自体は、上部に 3 つのボタン (ロード、読み取り、クリア) がある黒い背景の JFrame を開き、クリックに基づいて直線を作成し、右クリックすると形状を閉じることになっています。彼の Mac では問題なく動作しますが、私の場合はそうではありません。私たちは両方ともEclipseを使用しています。(Dr. Java でもテストしました)。

私たちは初心者なので、優しくしてください:)

ここに問題があります:

彼がコンパイルして数回クリックした後: (10 の担当者がいないと写真をアップロードできません) http://i49.tinypic.com/nwwsqf.jpg コンパイルした後: http://i50.tinypic.com/2lxdkyg.png

助けてくれてありがとう。これが他の人にも役立つことを願っています。

コードは次のとおりです。

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Point;
    import java.awt.Rectangle;
    import java.awt.Shape;
    import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.GeneralPath;
import java.awt.image.ImageObserver;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.text.AttributedCharacterIterator;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class PolygonMaker extends JFrame {

    private List<Polygon> polygonList = new ArrayList<Polygon>();
    public Polygon polygonInProgress = new Polygon();
    JPanel drwaingPanel;
    JPanel buttonsPanel;

    public PolygonMaker() {
        polygonList.add(polygonInProgress);
    }

    public static void main(String srg[]) {

        new PolygonMaker().generateDrwaingArea();

    }

    public void generateDrwaingArea() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(this);
        setLayout(new BorderLayout());
        setSize(500, 500);
        setResizable(false);
        setLocation(400, 300);
        setTitle("Polygon Maker");
        setVisible(true);
        addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

                if (e.getButton() == MouseEvent.BUTTON1) {
                    polygonInProgress.add(new Point(e.getX(), e.getY()));
                    System.out.println("clicked");
                } else if (e.getButton() == MouseEvent.BUTTON3) {
                    boolean fill = e.isShiftDown();
                    System.out.println("shift pressed");
                    if (polygonInProgress.size() > 2) {
                        recordPolygon(fill);
                        polygonInProgress = new Polygon();
                        polygonList.add(polygonInProgress);
                    }
                }
                repaint();
            }

            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseClicked(MouseEvent e) {
                // TODO Auto-generated method stub

            }
        });

        buttonsPanel = createButtonsPanel();

        drwaingPanel = new JPanel();
        drwaingPanel.setBackground(Color.black);

        add(buttonsPanel, BorderLayout.NORTH);
        add(drwaingPanel, BorderLayout.CENTER);
    }

    public JPanel createButtonsPanel() {
        JButton loadData = new JButton("Load Data");
        JButton clear = new JButton("Clear");
        loadData.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                File poly = new File(
                        "C:\\Users\\Raghav\\Desktop\\poly.dat");
                try {
                    Scanner scanner = new Scanner(poly);
                    Object options[] = { "Ok", "Cancel" };
                    int selection = JOptionPane
                            .showOptionDialog(
                                    new JFrame(),
                                    "Loading File overides current data .Continue loading?",
                                    "Loading File overides current data .Continue loading?",
                                    JOptionPane.OK_CANCEL_OPTION,
                                    JOptionPane.INFORMATION_MESSAGE, null,
                                    options, options[1]);

                    if (selection == JOptionPane.OK_OPTION) {
                        remove(drwaingPanel);                       
                        remove(buttonsPanel);
                        drwaingPanel = new JPanel();
                        drwaingPanel.setBackground(Color.black);                        
                        buttonsPanel = createButtonsPanel();
                        add(drwaingPanel, BorderLayout.CENTER);                     
                        add(buttonsPanel, BorderLayout.NORTH);
                        validate();
                        polygonList = new ArrayList<Polygon>();
                        while (scanner.hasNextLine()) {

                            String line = scanner.nextLine();
                            Polygon polygon = new Polygon();
                            int numberOfPoints = Integer.parseInt(line
                                    .substring(0, line.indexOf(32)));
                            line = line.substring(line.indexOf(32) + 1);
                            String fillStatus = line.substring(0,
                                    line.indexOf(32));
                            System.out.println(fillStatus);
                            if (fillStatus.equals("false"))
                                polygon.setFillStatus(false);
                            else if (fillStatus.equals("true"))
                                polygon.setFillStatus(true);
                            line = line.substring(line.indexOf(32) + 1);
                            String isCompleted = line.substring(0,
                                    line.indexOf(32));
                            System.out.println(isCompleted);
                            if (isCompleted.equals("false"))
                                polygon.setFillStatus(false);
                            else if (isCompleted.equals("true"))
                                polygon.setFinished(true);
                            line = line.substring(line.indexOf(32) + 1);
                            String redValue = line.substring(0,
                                    line.indexOf(32));
                            System.out.println(redValue);
                            line = line.substring(line.indexOf(32) + 1);
                            String greenValue = line.substring(0,
                                    line.indexOf(32));
                            System.out.println(greenValue);
                            line = line.substring(line.indexOf(32) + 1);
                            String yellowValue = line.substring(0,
                                    line.length());
                            System.out.println(yellowValue);

                            polygon.color = new Color(Integer
                                    .parseInt(redValue), Integer
                                    .parseInt(greenValue), Integer
                                    .parseInt(yellowValue));

                            for (int i = 0; i < numberOfPoints; i++) {
                                line = scanner.nextLine();
                                int x = Integer.parseInt(line.substring(0,
                                        line.indexOf(32)));
                                line = line.substring(line.indexOf(32) + 1);
                                int y = Integer.parseInt(line.substring(0,
                                        line.length()));
                                polygon.add(new Point(x, y));
                            }

                            polygonList.add(polygon);


                        }


                        polygonInProgress= new Polygon();
                        polygonList.add(polygonInProgress); 

                        validate();



                    }

                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    JOptionPane.showMessageDialog(new JFrame(),
                            "Cannot find poly.dat");
                }

                validate();


            }
        });
        JButton saveData = new JButton("Save Data");
        saveData.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                File poly = new File("C:\\Users\\Raghav\\Desktop\\poly.dat");

                try {
                    BufferedWriter bufferedWriter = new BufferedWriter(
                            new FileWriter(poly));
                    for (Polygon polygon : polygonList) {
                        try {

                            bufferedWriter.write(polygon.size() + " "
                                    + polygon.isFilled() + " "
                                    + polygon.isFinished() + " "
                                    + polygon.color.getRed() + " "
                                    + polygon.color.getGreen() + " "
                                    + polygon.color.getBlue());
                            bufferedWriter.newLine();

                            for (int i = 0; i < polygon.size(); i++) {
                                bufferedWriter
                                        .write(polygon.getPoints().get(i).x
                                                + " "
                                                + polygon.getPoints().get(i).y);
                                bufferedWriter.newLine();
                            }

                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                    }
                    bufferedWriter.close();
                } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IOException e2) {
                    // TODO Auto-generated catch block
                    e2.printStackTrace();
                }

            }
        });

        clear.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("clear called");
                remove(drwaingPanel);
                drwaingPanel = new JPanel();
                drwaingPanel.setBackground(Color.black);
                add(drwaingPanel, BorderLayout.CENTER);
                remove(buttonsPanel);
                buttonsPanel = createButtonsPanel();
                add(buttonsPanel, BorderLayout.NORTH);
                validate();
                polygonList = new ArrayList<Polygon>();
                polygonInProgress = new Polygon();
                polygonList.add(polygonInProgress);

            }
        });

        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setBackground(Color.black);
        buttonsPanel.add(loadData);
        buttonsPanel.add(saveData);
        buttonsPanel.add(clear);


        return buttonsPanel;

    }

    public void paint(Graphics g) {
        for (Polygon polygon : polygonList)
            polygon.paintComponent(g);
    }

    private void recordPolygon(boolean fill) {
        // TODO Auto-generated method stub

        polygonInProgress.setFillStatus(fill);
        polygonInProgress.setFinished(true);
        remove(buttonsPanel);
        remove(drwaingPanel);
        drwaingPanel = new JPanel();
        drwaingPanel.setBackground(Color.black);
        buttonsPanel = createButtonsPanel();
        add(drwaingPanel, BorderLayout.CENTER);
        add(buttonsPanel, BorderLayout.NORTH);
        validate();
        repaint();

        // polygonList.add(polygonInProgress);
        JOptionPane.showMessageDialog(this, "New " + polygonInProgress.size()
                + "-gon recorded \n " + (polygonList.size())
                + " polygons in all");

    }

}

と...

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Paint;
import java.awt.Point;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class Polygon {

    static final int POINT_SIZE = 0;
    static Random rnd = new Random();
    private List<Point> points = new ArrayList<Point>();
    public Color color = new Color(rnd.nextInt(255), rnd.nextInt(255),
            rnd.nextInt(255));
    private boolean isFilled = false;
    private boolean isFinished = false;
    private Point lastPointOfPloygon;

    public Polygon() {

    }

    public void write(PrintStream ps) {

    }

    public void read(Scanner scanner) {

    }

    public boolean isFinished() {
        return isFinished;

    }

    public boolean isFilled() {
        return isFilled;

    }

    public List<Point> getPoints() {
        return points;
    }

    public void setFilled(boolean isFilled) {
        this.isFilled = isFilled;
    }

    public void setFillStatus(boolean status) {
        isFilled = status;
    }

    public void paintComponent(Graphics g) {
        System.out.println("paint commponebt calles");
        g.setColor(color);
        for (int i = 0; i < points.size(); i++) {

            if (i == points.size() - 1) {
                System.out.println("last point");
                if (isFinished == true) {
                    System.out.println(isFinished + "connect");
                    if (isFilled == true) 
                    g.fillOval(points.get(i).x, points.get(i).y, 5, 5);
                    g.drawLine(points.get(i).x, points.get(i).y,
                            points.get(0).x, points.get(0).y);
                }
            } else {
                if (isFilled == true) 
                    g.fillOval(points.get(i).x, points.get(i).y, 5, 5);
                    g.drawLine(points.get(i).x, points.get(i).y,
                            points.get(i + 1).x, points.get(i + 1).y);

            }
        }
    }

    public int size() {
        return points.size();
    }

    public void add(Point point) {
        points.add(point);

    }

    public void setFinished(Boolean finishedValue) {
        isFinished = finishedValue;
    }

    @Override
    public String toString() {
        return null;

    }
}
4

3 に答える 3

3

これが機能しなかった理由はいくつかあります。

  1. コード (パートナーで機能すると仮定) は、一部のインポートを認識しない場合があります。eclipse と入力すると、入力時に必要なインポートがインポートされます。再インポートしても、必要な場所が見つからない場合があります。これが問題の場合は、赤で概説されているコードにカーソルを合わせて修正を選択してみてください。 .
  2. 彼/彼女は、あなたが持っていないものをインポートまたは参照している可能性があります。これは、あなたのバージョン オフまたはアドオンが原因である可能性があり、もう一方はそうではありません。単にこの問題を解決するように彼/彼女に依頼してください。
  3. Java コードを (Eclipse を使用して) 転送するには、コード自体ではなく、割り当てたワークスペースの折り畳み全体を個人的にコピーします。これにより、必要なすべての依存ファイル (ゲームの場合は画像やサウンドファイルなど) も確実に含まれます。 .
  4. 異なるバージョンの Mac OS を実行している場合、Java コードにも影響する可能性がありますが、これはほとんどありません。私はプログラミング時に Windows または Linux を使用する傾向があるため、Mac バージョンで発生する可能性のあるわずかな違いをすべて知っているわけではありません。

ファイル共有サーバー、ワークステーション、または同時にコードを記述する他の方法がある場合は、プロジェクトをそこにインポートして、この問題が再び発生しないようにすることができます。新しいプログラマーに会えるのは良いことです。それを維持し、このサイトの誰もが喜んで助けてくれる質問をすることを恐れないでください! あなたのプロジェクトで頑張ってください:)

于 2013-04-01T00:14:00.043 に答える
1

あなたのコードと MacOS 上のパートナーの潜在的な違いの 1 つは、コード内の 2 つの場所でファイルへのパスを指定していることです。

C:\Users\Raghav\Desktop\poly.dat

ファイルへの書き込みに問題がある場合、例外が発生します。コード内で同じファイル名が 2 回使用されています。これが「テスト コード」であっても、ファイル名を 1 回指定することをお勧めします。

static final String DATA_FILE = "C:\\Users\\Raghav\\Desktop\\poly.dat";

コード内の DATA_FILE を参照してください。

問題はこれではないかもしれません。残念ながら、あなたの質問は問題の性質について非常に漠然としています.「何も機能しない」または「彼のMacではうまく機能しますが、私のMacでは機能しません」. これは Code-Guru と knowbody が求めてきたものです。問題を詳しく説明していただければ、より適切な回答を提供できる可能性があります。例: プログラムは実行されませんか? プログラムは例外でクラッシュしますか? また、その例外は何ですか? プログラムは期待どおりに動作しませんか (何を行い、何をすべきか)?

于 2013-04-01T00:32:42.790 に答える
0

うーん...大した質問ではありません...しかし、2人の間でコードを編集する方法に関するヒントを探している場合は、sshできるターミナルとvimを使用することをお勧めします。

于 2013-04-01T00:20:10.553 に答える