- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要第 2 步的帮助来了解 java 中文件处理的工作原理,,,,...
这就是我正在做的事情......:-问题:异常注意:我是这个概念的新手,请告诉我我的代码有什么问题。
-使用 swing 创建一个迷你 Java 应用程序,它必须要求输入用户名和密码,并有一个创建按钮。
-按下创建按钮后,必须使用用户名创建一个新目录,并且必须将密码保存为该目录内的password.txt 文件。
-如果目录已存在,则应出现一个弹出窗口,显示“用户已存在”。
我已经尝试了几个小时,但无法正确完成,非常感谢您的帮助。
我需要查看一些相关代码,同时我不断尝试修复我的代码。
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
class CreateUser implements ActionListener
{
JFrame fr; //Frame
JButton b1; //Create Button
JLabel lb1, lb2; //Username and password
JTextField tf1, tf2; //Username and password input fields
JPanel p1;
CreateUser()
{
//Setting the frame
fr=new JFrame();
fr.setLayout(null);
fr.setSize(400,400);
//setting panel
p1=new JPanel();
p1.setBounds(0,0,400,400);
p1.setLayout(null);
//setting Username Label
JLabel lb1=new JLabel("Username: ");
lb1.setBounds(50,50,70,30);
p1.add(lb1);
//setting Username Text Field
JTextField tf1 = new JTextField();
tf1.setBounds(150,50,150,30);
p1.add(tf1);
//setting Password Label
JLabel lb2=new JLabel("Password: ");
lb2.setBounds(50,100,70,30);
p1.add(lb2);
//setting Password Text Field
JTextField tf2 = new JTextField();
tf2.setBounds(150,100,150,30);
p1.add(tf2);
//setting Button
b1=new JButton("Create");
b1.setBounds(100,200,100,40);
p1.add(b1);
fr.add(p1);
fr.setVisible(true);
b1.addActionListener(this);
tf1.addActionListener(this);
tf2.addActionListener(this);
}
public static void main(String s[])
{
new CreateUser();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
{
String uid = tf1.getText();
String pass = tf2.getText();
String dir = System.getProperty("user.dir");
//Creating a new folder Users
File file = new File(dir+"\\users");
if (!file.exists())
{
if (file.mkdir())
{
System.out.println("Directory is created!");
}
else
{
System.out.println("Failed to create directory!");
}
}
dir = dir+"\\users";
//Creating a folder named with username inside Users folder
File file1 = new File(dir+"\\"+uid);
if (!file1.exists())
{
if (file1.mkdir())
{
System.out.println("Directory is created!");
}
else
{
System.out.println("Failed to create directory!");
}
}
//Storing Password.txt inside users/username folder
try
{
FileOutputStream fout=new FileOutputStream("password.txt");
byte b[]=pass.getBytes();
fout.write(b);
}
catch(Exception ee)
{}
}
}
}
}
最佳答案
这里有很多潜在的问题,所以让我们看一下代码:
class CreateUser implements ActionListener {
小问题:避免让 GUI 类实现控制接口(interface)。这给了类太多的责任,使类变得困惑,导致代码笨重而难以调试。最好使用匿名内部类或非匿名内部类。
JFrame fr; // Frame
JButton b1; // Create Button
JLabel lb1, lb2; // Username and password
JTextField tf1, tf2; // Username and password input fields
JPanel p1;
小问题:字段应该始终是私有(private)的,除非您有特定原因要公开。您不这样做,所以在这里将它们设为私有(private)。
CreateUser() {
// Setting the frame
fr = new JFrame();
fr.setLayout(null);
fr.setSize(400, 400);
小问题:永远、永远、永远不要使用 null
布局。虽然 null 布局和 setBounds()
对于 Swing 新手来说似乎是创建复杂 GUI 的最简单、最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,当放置在滚动 Pane 中时,它们会完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕。
// setting panel
p1 = new JPanel();
p1.setBounds(0, 0, 400, 400);
p1.setLayout(null);
同样的问题。了解布局管理器,然后使用布局管理器。
// setting Username Text Field
JTextField tf1 = new JTextField();
主要问题:您正在此处遮挡一个字段。通过在类构造函数中重新声明 tf1 变量,您可以将 JTextField 对象分配给本地变量,这意味着类中的 tf1 字段保持为空/未分配/空。如果您尝试使用此 null 字段,这可能会导致调用 NullPointerException。
因此,如果您要在构造函数或 init 方法中进行对象创建和赋值,则不要使用
JTextField tf1 = new JTextField();
做:
tf1 = new JTextField();
// setting Password Text Field
JTextField tf2 = new JTextField();
同样的问题。另外,这应该是 JPasswordField 而不是 JTextField。
// setting Button
b1 = new JButton("Create");
由于某种原因,您正确分配了按钮。想想吧。
public static void main(String s[]) {
new CreateUser();
}
始终在 Swing 事件线程或 EDT(事件调度线程)上启动 Swing 应用程序。这样做:
public static void main(String s[]) {
SwingUtilities.invokeLater(() -> new CreateUser());
}
<小时/>
try {
FileOutputStream fout = new FileOutputStream("password.txt");
byte b[] = pass.getBytes();
fout.write(b);
} catch (Exception ee) {
}
主要问题:永远不要有一个空的 catch block ,这相当于试图蒙住眼睛驾驶汽车。至少打印出堆栈跟踪,以便在错误发生时您会收到通知。另外,如果您要写出文本,请使用 PrintWriter 等书写器。我不会讨论写出密码文本的危险,但显然这是您在现实生活中永远不会做的事情。
关于java - 使用 Java 中的 Swing 进行文件处理编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252547/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!