学习 Spring Boot:(二十九)Spring Boot Junit 单元测试
前言
本篇文章的主要源码地址
可以先 clone 下来
JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量。
JUnit 测试框架具有以下重要特性:
- 测试工具
- 测试套件
- 测试运行器
- 测试分类
了解 Junit 基础方法
加入依赖
在 pom.xml
中加入依赖:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope><version>4.12</version>
</dependency>
创建测试类和测试方法
- 测试类的的命名规则一般是
xxxTest.java
; - 测试类中测试的方法可以有前缀,这个看统一标准,所以有时候会发现别人的测试方法上有
test
前缀; - 并且测试方法上加上注解
@Test
。
使用 IDEA 中,选中当前类名,使用快捷键 ALT + ENTER
(WIN),向下选则 Create Test
回车,即可进入生成测试类的选项中,再次回车,就快速的生成测试类。
OK
完你会发现,生成的测试类在 src/test
目录下,测试类和源代码的包名 是一致的。生成后结果(注意下生成的方法名是不加 test):
public class HelloServiceImplTest {@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void say() {}
}
JUnit中的注解
@BeforeClass
:针对所有测试,只执行一次,且必须为static void
@Before
:初始化方法,执行当前测试类的每个测试方法前执行。@Test
:测试方法,在这里可以测试期望异常和超时时间@After
:释放资源,执行当前测试类的每个测试方法后执行@AfterClass
:针对所有测试,只执行一次,且必须为static void
@Ignore
:忽略的测试方法(只在测试类的时候生效,单独执行该测试方法无效)@RunWith
:可以更改测试运行器 ,缺省值org.junit.runner.Runner
一个单元测试类执行顺序为:
@BeforeClass
–> @Before
–> @Test
–> @After
–> @AfterClass
每一个测试方法的调用顺序为:
@Before
–> @Test
–> @After
超时测试
如果一个测试用例比起指定的毫秒数花费了更多的时间,那么 Junit 将自动将它标记为失败。timeout
参数和 @Test
注释一起使用。现在让我们看看活动中的 @test(timeout)
。
@Test(timeout = 1000)public void testTimeout() throws InterruptedException {TimeUnit.SECONDS.sleep(2);System.out.println("Complete");}
上面测试会失败,在一秒后会抛出异常 org.junit.runners.model.TestTimedOutException: test timed out after 1000 milliseconds
异常测试
你可以测试代码是否它抛出了想要得到的异常。expected 参数和 @Test 注释一起使用。现在让我们看看活动中的 @Test(expected)
。
@Test(expected = NullPointerException.class)public void testNullException() {throw new NullPointerException();}
上面代码会测试成功。
套件测试
public class TaskOneTest {@Testpublic void test() {System.out.println("Task one do.");}
}public class TaskTwoTest {@Testpublic void test() {System.out.println("Task two do.");}
}public class TaskThreeTest {@Testpublic void test() {System.out.println("Task Three.");}
}@RunWith(Suite.class) // 1. 更改测试运行方式为 Suite
// 2. 将测试类传入进来
@Suite.SuiteClasses({TaskOneTest.class, TaskTwoTest.class, TaskThreeTest.class})
public class SuitTest {/*** 测试套件的入口类只是组织测试类一起进行测试,无任何测试方法,*/
}
参数化测试
Junit 4 引入了一个新的功能参数化测试。参数化测试允许开发人员使用不同的值反复运行同一个测试。你将遵循 5 个步骤来创建参数化测试。
- 用
@RunWith(Parameterized.class)
来注释 test 类。 - 创建一个由
@Parameters
注释的公共的静态方法,它返回**一个对象的集合(数组)**来作为测试数据集合。 - 创建一个公共的构造函数,它接受和一行测试数据相等同的东西。
- 为每一列测试数据创建一个实例变量。
- 用实例变量作为测试数据的来源来创建你的测试用例。
//1.更改默认的测试运行器为RunWith(Parameterized.class)
@RunWith(Parameterized.class)
public class ParameterTest {// 2.声明变量存放预期值和测试数据private String firstName;private String lastName;//3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰@Parameterized.Parameters //public static List<Object[]> param() {// 这里我给出两个测试用例return Arrays.asList(new Object[][]{{"Mike", "Black"}, {"Cilcln", "Smith"}});}//4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值public ParameterTest(String firstName, String lastName) {this.firstName = firstName;this.lastName = lastName;}// 5. 进行测试,发现它会将所有的测试用例测试一遍@Testpublic void test() {String name = firstName + " " + lastName;assertThat("Mike Black", is(name));}
}
Hamcrest
JUnit 4.4 结合 Hamcrest 提供了一个全新的断言语法——assertThat。
语法:
assertThat( [actual], [matcher expected] );
assertThat 使用了 Hamcrest 的 Matcher 匹配符,用户可以使用匹配符规定的匹配准则精确的指定一些想设定满足的条件,具有很强的易读性,而且使用起来更加灵活。
具体使用的一些匹配规则可以查看源码。
Spring Boot 中使用 JUnit
Spring 框架提供了一个专门的测试模块(spring-test),用于应用程序的集成测试。 在 Spring Boot 中,你可以通过spring-boot-starter-test启动器快速开启和使用它。
加入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
Spring Boot 测试
// 获取启动类,加载配置,确定装载 Spring 程序的装载方法,它回去寻找 主配置启动类(被 @SpringBootApplication 注解的)
@SpringBootTest
// 让 JUnit 运行 Spring 的测试环境, 获得 Spring 环境的上下文的支持
@RunWith(SpringRunner.class)
public class EmployeeServiceImplTest {// do
}
Spring MVC 测试
当你想对 Spring MVC
控制器编写单元测试代码时,可以使用@WebMvcTest
注解。它提供了自配置的 MockMvc
,可以不需要完整启动 HTTP
服务器就可以快速测试 MVC 控制器
。
-
需要测试的 Controller:
@RestController @RequestMapping(value = "/emp", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public class EmployeeController {private final EmployeeService employeeService;@Autowiredpublic EmployeeController(EmployeeService employeeService) {this.employeeService = employeeService;}@GetMappingpublic ResponseEntity<List<EmployeeResult>> listAll() {return ResponseEntity.ok(employeeService.findEmployee());} }
-
编写
MockMvc
的测试类:@RunWith(SpringRunner.class) @WebMvcTest(EmployeeController.class) public class EmployeeController2Test {@Autowiredprivate MockMvc mvc;@MockBeanprivate EmployeeService employeeService;public void setUp() {// 数据打桩,设置该方法返回的 body一直 是空的Mockito.when(employeeService.findEmployee()).thenReturn(new ArrayList<>());}@Testpublic void listAll() throws Exception {mvc.perform(MockMvcRequestBuilders.get("/emp")).andExpect(status().isOk()) // 期待返回状态吗码200// JsonPath expression https://github.com/jayway/JsonPath//.andExpect(jsonPath("$[1].name").exists()) // 这里是期待返回值是数组,并且第二个值的 name 存在,所以这里测试是失败的.andDo(print()); // 打印返回的 http response 信息} }
使用
@WebMvcTest
注解时,只有一部分的 Bean 能够被扫描得到,它们分别是:@Controller
@ControllerAdvice
@JsonComponent
Filter
WebMvcConfigurer
HandlerMethodArgumentResolver
其他常规的@Component
(包括@Service
、@Repository
等)Bean 则不会被加载到 Spring 测试环境上下文中。
所以我在上面使用了数据打桩,Mockito
在这篇文章最后一节。
-
我们也可以注入Spring 上下文的环境到 MockMvc 中,如下编写
MockMvc
的测试类:@RunWith(SpringRunner.class) @SpringBootTest public class EmployeeControllerTest {/*** Interface to provide configuration for a web application.*/@Autowiredprivate WebApplicationContext ctx;private MockMvc mockMvc;/*** 初始化 MVC 的环境*/@Beforepublic void before() {mockMvc = MockMvcBuilders.webAppContextSetup(ctx).build();}@Testpublic void listAll() throws Exception {mockMvc.perform(get("/emp") // 测试的相对地址.accept(MediaType.APPLICATION_JSON_UTF8) // accept response content type).andExpect(status().isOk()) // 期待返回状态吗码200// JsonPath expression https://github.com/jayway/JsonPath.andExpect(jsonPath("$[1].name").exists()) // 这里是期待返回值是数组,并且第二个值的 name 存在.andDo(print()); // 打印返回的 http response 信息} }
值得注意的是需要首先使用
WebApplicationContext
构建MockMvc
。
Spring Boot Web 测试
当你想启动一个完整的 HTTP 服务器对 Spring Boot 的 Web 应用编写测试代码时,可以使用@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
注解开启一个随机的可用端口。Spring Boot 针对 REST 调用的测试提供了一个 TestRestTemplate
模板,它可以解析链接服务器的相对地址。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class EmployeeController1Test {@Autowiredprivate TestRestTemplate restTemplate;@Testpublic void listAll() {ResponseEntity<List> result = restTemplate.getForEntity("/emp", List.class);Assert.assertThat(result.getBody(), Matchers.notNullValue());}
}
其实之前上面的测试返回结果不是很正确,只能接收个List,给测试代码添加了不少麻烦,还好最终找到了解决办法:
@Testpublic void listAll() {// 由于我返回的是 List 类型的,一直想不到办法解决,网上给出了解决办法,使用 exchange 函数代替//public <T> ResponseEntity<T> exchange(String url, HttpMethod method,// HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType,// Object... urlVariables) throws RestClientException {ParameterizedTypeReference<List<EmployeeResult>> type = new ParameterizedTypeReference<List<EmployeeResult>>() {};ResponseEntity<List<EmployeeResult>> result = restTemplate.exchange("/emp", HttpMethod.GET, null, type);Assert.assertThat(result.getBody().get(0).getName(), Matchers.notNullValue());}
Spring Data JPA 测试
我们可以使用 @DataJpaTest
注解表示只对 JPA 测试;@DataJpaTest
注解它只扫描@Entity
Bean 和装配 Spring Data JPA 存储库,其他常规的@Component
(包括@Service
、@Repository
等)Bean 则不会被加载到 Spring 测试环境上下文。
@DataJpaTest
还提供两种测试方式:
- 使用内存数据库
h2database
,Spring Data Jpa 测试默认采取的是这种方式; - 使用真实环境的数据库。
使用内存数据库测试
-
默认情况下,
@DataJpaTest
使用的是内存数据库进行测试,你无需配置和启用真实的数据库。只需要在pom.xml
配置文件中声明如下依赖即可:<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId> </dependency>
gradle file:
testCompile('com.h2database:h2')
-
编写测试方法:
@RunWith(SpringRunner.class) @DataJpaTest public class EmployeeDaoTest {@Autowiredprivate EmployeeDao employeeDao;@Testpublic void testSave() {Employee employee = new Employee();EmployeeDetail detail = new EmployeeDetail();detail.setName("kronchan");detail.setAge(24);employee.setDetail(detail);assertThat(detail.getName(), Matchers.is(employeeDao.save(employee).getDetail().getName()));;} }
使用真实数据库测试
如要需要使用真实环境中的数据库进行测试,需要替换掉默认规则,使用@AutoConfigureTestDatabase(replace = Replace.NONE)
注解:
@RunWith(SpringRunner.class)
@DataJpaTest
// 加入 AutoConfigureTestDatabase 注解
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class EmployeeDaoTest {@Autowiredprivate EmployeeDao employeeDao;@Testpublic void testSave() {Employee employee = new Employee();EmployeeDetail detail = new EmployeeDetail();detail.setName("kronchan");detail.setAge(24);employee.setDetail(detail);assertThat(detail.getName(), Matchers.is(employeeDao.save(employee).getDetail().getName()));;}
}
事务控制
执行上面的新增数据的测试,发现测试通过,但是数据库却并没有新增数据。默认情况下,在每个 JPA 测试结束时,事务会发生回滚。这在一定程度上可以防止测试数据污染数据库。
如果你不希望事务发生回滚,你可以使用@Rollback(false)
注解,该注解可以标注在类级别做全局的控制,也可以标注在某个特定不需要执行事务回滚的方法级别上。
也可以显式的使用注解 @Transactional
设置事务和事务的控制级别,放大事务的范围。
Mockito
这部分参考 使用Mockito和SpringTest进行单元测试
JUnit
和SpringTest
,基本上可以满足绝大多数的单元测试了,但是,由于现在的系统越来越复杂,相互之间的依赖越来越多。特别是微服务化以后的系统,往往一个模块的代码需要依赖几个其他模块的东西。因此,在做单元测试的时候,往往很难构造出需要的依赖。一个单元测试,我们只关心一个小的功能,但是为了这个小的功能能跑起来,可能需要依赖一堆其他的东西,这就导致了单元测试无法进行。所以,我们就需要再测试过程中引入Mock
测试。
所谓的Mock
测试就是在测试过程中,对于一些不容易构造的、或者和这次单元测试无关但是上下文又有依赖的对象,用一个虚拟的对象(Mock对象)来模拟,以便单元测试能够进行。
比如有一段代码的依赖为:
当我们要进行单元测试的时候,就需要给A
注入B
和C
,但是C
又依赖了D
,D
又依赖了E
。这就导致了,A的单元测试很难得进行。
但是,当我们使用了Mock来进行模拟对象后,我们就可以把这种依赖解耦,只关心A本身的测试,它所依赖的B和C,全部使用Mock出来的对象,并且给MockB
和MockC
指定一个明确的行为。就像这样:
因此,当我们使用Mock后,对于那些难以构建的对象,就变成了个模拟对象,只需要提前的做Stubbing
(桩)即可,所谓做桩数据,也就是告诉Mock对象,当与之交互时执行何种行为过程。比如当调用B对象的b()方法时,我们期望返回一个true
,这就是一个设置桩数据的预期。
基础
Mockito 简明教程
Spring Boot 中使用
上面的 Spring MVC 测试
中也使用到了 Mockito
,
spring-boot-starter-test
自带了 mockito-core
。
基础业务
@Entity
@Data
@NoArgsConstructor
public class User implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(unique = true, nullable = false, length = 50)private String username;private String password;@CreationTimestampprivate Date createDate;public User(Long id, String username) {this.id = id;this.username = username;}
}public interface IUserRepository extends JpaRepository<User, Long> {boolean updateUser(User user);
}@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements IUserService {private final IUserRepository userRepository;@Overridepublic User findOne(Long id) {return userRepository.getOne(id);}@Overridepublic boolean updateUsername(Long id, String username) {User user = findOne(id);if (user == null) {return false;}user.setUsername(username);return userRepository.updateUser(user);}
}
测试类
public class IUserServiceTest {private IUserService userService;//@Mockprivate IUserRepository userRepository;@Beforepublic void setUp() throws Exception {// 对所有注解了@Mock的对象进行模拟// MockitoAnnotations.initMocks(this);// 不使用注解,可以对单个对象进行 mockuserRepository = Mockito.mock(IUserRepository.class);// 构造被测试对象userService = new UserServiceImpl(userRepository);// 打桩,构建当 userRepository的 getOne 函数执行参数为 1的时候,设置返回的结果 UserMockito.when(userRepository.getOne(1L)).thenReturn(new User(1L, "kronchan"));// 打桩,构建当 userRepository的 getOne 函数执行参数为 2的时候,设置返回的结果 nullMockito.when(userRepository.getOne(2L)).thenReturn(null);// 打桩,构建当 userRepository的 getOne 函数执行参数为 3的时候,设置结果抛出异常Mockito.when(userRepository.getOne(3L)).thenThrow(new IllegalArgumentException("The id is not support"));// 打桩,当 userRepository.updateUser 执行任何User类型的参数,返回的结果都是trueMockito.when(userRepository.updateUser(Mockito.any(User.class))).thenReturn(true);}@Testpublic void testUpdateUsernameSuccess() {long userId = 1L;String newUsername = "new kronchan";// 测试某个 service 的方法boolean updated = userService.updateUsername(userId, newUsername);// 检查结果Assert.assertThat(updated, Matchers.is(true));// Verifies certain behavior <b>happened once</b>.// mock对象一旦创建,就会自动记录自己的交互行为。通过verify(mock).someMethod()方法,来验证方法是否被调用。// 验证调用上面的service 方法后是否 userRepository.getOne(1L) 调用过,Mockito.verify(userRepository).getOne(userId);// 有条件可以测试下没有被调用过的方法:// Mockito.verify(userRepository).deleteById(userId);// 则会测试失败:// Wanted but not invoked:// userRepository.deleteById(1L);// However, there were exactly 2 interactions with this mock:// userRepository.getOne(1L);// userRepository.updateUser(// User(id=1, username=new kronchan, password=null, createDate=null)// );// updateUsername 函数中我们调用了已经打桩了的其他的函数,现在我们来验证进入其他函数中的参数//构造参数捕获器,用于捕获方法参数进行验证ArgumentCaptor<User> userCaptor = ArgumentCaptor.forClass(User.class);// 验证updateUser方法是否被调用过,并且捕获入参Mockito.verify(userRepository).updateUser(userCaptor.capture());// 获取参数 updatedUserUser updatedUser = userCaptor.getValue();// 验证入参是否是预期的Assert.assertThat(updatedUser.getUsername(), Matchers.is(newUsername));//保证这个测试用例中所有被Mock的对象的相关方法都已经被Verify过了Mockito.verifyNoMoreInteractions(userRepository);// 如果有一个交互,但是我们没有verify ,则会报错,// org.mockito.exceptions.verification.NoInteractionsWanted:// No interactions wanted here:// -> at com.wuwii.service.IUserServiceTest.testUpdateUsernameSuccess(IUserServiceTest.java:74)// But found this interaction on mock 'iUserRepository':// -> at com.wuwii.service.impl.UserServiceImpl.findOne(UserServiceImpl.java:21)// ***}@Testpublic void testUpdateUsernameFailed() {long userId = 2L;String newUsername = "new kronchan";// 没有经过 mock 的 updateUser 方法,它返回的是 falseboolean updated = userService.updateUsername(userId, newUsername);Assert.assertThat(updated, Matchers.not(true));//验证userRepository的getOne(2L)这个方法是否被调用过,(这个是被测试过的,此步骤通过)Mockito.verify(userRepository).getOne(2L);// 验证 userRepository 的 updateUser(null)这个方法是否被调用过,(这个没有被测试过,此步骤不通过)//Mockito.verify(userRepository).updateUser(null);Mockito.verifyNoMoreInteractions(userRepository);}
}
分析
创建MOCK的对象
我需要对 userService
进行测定,就需要模拟 userRepository
对象。
我在 setUp()
方法中,模拟对象并打桩。
模拟对象有两种方式:
- 对注解了@Mock的对象进行模拟
MockitoAnnotations.initMocks(this);
- 对单个对象手动 mock :
userRepository = Mockito.mock(IUserRepository.class);
数据打桩,除了上面我代码上用的几个方法,还有非常多的方法,具体可以在使用的时候看到,主要分下面几种:
-
最基本的用法就是调用
when
以及thenReturn
方法了。他们的作用就是指定当我们调用被代理的对象的某一个方法以及参数的时候,返回什么值。 -
提供参数匹配器,灵活匹配参数。
any()
、any(Class<T> type)
、anyBoolean()
、anyByte()
、anyChar()
、anyInt()
、anyLong()
等等,它支持复杂的过滤,可以使用正则Mockito.matches(".*User$"))
,开头结尾验证endsWith(String suffix)
,startsWith(String prefix)
、判空验证isNotNull()
isNull()
也还可以使用 argThat(ArgumentMatcher matcher),如:ArgumentMatcher
只有一个方法boolean matches(T argument);
传入入参,返回一个boolean表示是否匹配。Mockito.argThat(argument -> argument.getUsername.length() > 6;
-
Mockito还提供了两个表示行为的方法:
thenAnswer(Answer<?> answer);
、thenCallRealMethod();
,分别表示自定义处理调用后的行为,以及调用真实的方法。这两个方法在有些测试用例中还是很有用的。 -
对于同一个方法,Mockito可以是顺序与次数关心的。也就是说可以实现同一个方法,第一次调用返回一个值,第二次调用返回一个值,甚至第三次调用抛出异常等等。只需要连续的调用
thenXXXX
即可。 -
如果为一个返回为Void的方法设置桩数据。上面的方法都是表示的是有返回值的方法,而由于一个方法没有返回值,因此我们不能调用
when
方法(编译器不允许)。因此,对于无返回值的方法,Mockito提供了一些列的doXXXXX
方法,比如:doAnswer(Answer answer)
、doNothing()
、doReturn(Object toBeReturned)
、doThrow(Class<? extends Throwable> toBeThrown)
、doCallRealMethod()
。他们的使用方法其实和上面的thenXXXX
是一样的,但是when
方法传入的是Mock的对象:/*对void的方法设置模拟*/ Mockito.doAnswer(invocationOnMock -> {System.out.println("进入了Mock");return null; }).when(fileRecordDao).insert(Mockito.any());
当 Mockito 监视一个真实的对象的时候,我们也可以模拟这个对象的方法返回我们设置的期望值,
List spy = spy(new LinkedList()); List spy = spy(new LinkedList()); // IndexOutOfBoundsException (the list is yet empty) when(spy.get(0)).thenReturn("foo"); // You have to use doReturn() for stubbing doReturn("foo").when(spy).get(0);
when方法参数中
spy.get(0)
,调用的是真实list对象的get(0),这会产生IndexOutOfBoundsException
异常,所以这时需要用到doReturn
方法来设置返回值。
验证测试方法的结果
使用断言语句检查结果。
验证MOCK对象的调用
其实,在这里我们如果只是验证方法结果的正确的话,就非常简单,但是,在复杂的方法调用堆栈中,往往可能出现结果正确,但是过程不正确的情况。比如,updateUserName
方法返回false是有两种可能的,一种可能是用户没有找到,还有一种可能就是userRepository.updateUser(userPO)
返回false。因此,如果我们只是使用Assert.assertFalse(updated);
来验证结果,可能就会忽略某些错误。
-
因此我在上面的测试中还需要验证指定的方法
userRepository).getOne(userId);
是否运行过,而且我还使用了参数捕获器,抓取中间的方法参数,用来验证。 -
提供了
verify(T mock, VerificationMode mode)
方法。VerificationMode
有很多作用,// 验证指定方法 get(3) 没有被调用 verify(mock, never()).get(3);
-
verifyZeroInteractions
和verifyNoMoreInteractions
验证所有 mock 的方法是否都调用过了。
本篇文章的主要代码地址
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- String和Object转换
http://www.cnblogs.com/mingzi/archive/2009/01/03/1367474.html转载于:https://www.cnblogs.com/blogonfly/p/4434174.html...
2024/4/18 22:58:21 - selenium+Java自学辛酸史
做了3年的功能测试,突然想牛逼一回,于是走上了撸码的不归路。完全从小白开始,连Java是啥都不清楚,代码看不懂。还好友个棒棒的Android开发朋友,一路帮我辅助。遇到的第一个问题: 调不起浏览器,于是辅助教我看错误信息,错误如下:未设置driver路径,当前使用浏览器:火狐…...
2024/4/12 9:07:04 - Android混合架构的实践
一、移动端跨平台的技术 跨平台概念跨平台是软件开发中一个重要的概念,即不依赖于操作系统,也不信赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。相对而言如果某种计算机语言不用修改代码即可做到高度跨平台,那么此语言就越抽象,硬件控制力就越…...
2024/4/9 18:22:36 - SWT 进度条的实现
原帖地址 http://www.eclipselight.org/swt-jface/532/comment-page-1/#comment-287下面代码实现的是SWT的进度条(ProgressBar),它可以很方便地实现你所需要的进度管理界面,本次实现的都是水平(SWT.HORIZONTAL)的(当然你可以做成垂直的),实现了它的平滑增长(SWT.SMOO…...
2024/4/12 9:07:04 - C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题
C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题 前言 上一篇中,我们已经用C语言通过对进程内存的读者操作,达到了自动收…...
2024/4/20 15:27:13 - .NET 环境下进行单元测试
转载:http://www.cnblogs.com/IPrograming/archive/2012/12/31/NunitHelloWorld.html单元测试入门——使用NUnit框架(1)单元测试是一种针对源码、低层次的,为程序员设计的测试。可以保证所写的代码符合软件需求和遵循开发的目标,并在软件开发早期减少程序Bug的数量,单元测试…...
2024/4/9 18:22:33 - ubuntu scp命令
两台ubuntu电脑之间传输文件:scp -r /home/wangpf/Report2 mingzi@111.111.111.111:/home/wenjianjia...
2024/4/13 15:46:04 - [Java 程序员] JAVA程序员必看的15本书-JAVA自学书籍推荐
转载:http://www.oschina.net/question/2367675_236222 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Jav…...
2024/4/9 18:22:31 - Monte Carlo随机模拟
原文链接:http://blog.csdn.net/on2way/article/details/47280671Monte Carlo方法也叫随机模拟、随机抽样或者统计实验方法。其主要用途用于模拟一些无法用数值产生的随机系统。比如当系统的各个单元的特征量已知,但系统过于复杂导致无法预测其准确数学模型,这个时候可以用随…...
2024/4/12 9:07:58 - SWT实现状态栏和进度条
实现功能如下: q 如何创建一个简单的状态栏(基于RCP平台能够直接使用它的进度条服务) q 如何在状态栏中动态创建进度条,同时如何用完后销毁它。 q 如何用exclude属性、setVisible和layout方法来动态显示/隐藏面板或组件。 q 再次表明在一个线程…...
2024/4/19 10:38:43 - 跨平台
跨平台跨平台概念是软件开发中一个重要的概念,即不依赖于操作系统,也不信赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。相对而言如果某种计算机语言不用修改代码即可做到高度跨平台,那么此语言就越抽象,硬件控制力就越低,只适合开发高度抽象…...
2024/4/12 9:07:46 - 获取网页html
所需求证链接: https://baike.baidu.com/item/%E4%BC%A0%E9%80%81%E9%97%A8%E9%AA%91%E5%A3%AB/19834187?fr=aladdin 进入存放文件夹 使用curl 工具,输入curl"url">mingzi.html例如:C:\Users\Administrator\Desktop>cd testC:\Users\Administrator\Deskt…...
2024/4/19 13:44:51 - Android单元测试/Ui测试+JaCoCo覆盖率统计
Android单元测试/Ui测试+JaCoCo覆盖率统计参考资料1 参考资料2背景说明单元测试 从源代码着手,对源码中的最小可测试单元进行检查和验证,在对源代码有较深的理解下,编写测试单元,工作量大,不管从编写单元测试用例再到用例的维护上,成本都会比较高,但是通过这种方式可靠…...
2024/4/12 9:08:04 - excel生成动态进度条
背景:想用excel展示实时进度信息 但是用的图标需要开通某壳会员才可以使用于是就想自己看看能不能做出来一个~接下来是用到的公式=REPT("▓",(COUNTIF(D2:D21,"="))/A21*20)&" "&ROUND((COUNTIF(D2:D21,"="))/A21*100,2)&…...
2024/4/19 8:27:11 - RLAI读书笔记-第五章-Monte Carlo
Monte Carlo Methods 无模型的蒙特卡洛学习方法 Model free idea:未知转移概率矩阵,未知state-value函数 == 通过模拟计算得到(有限的情节任务) Monte Carlo使用模拟解决Markov Decision Process5.1 MC Prediction MC基于抽样数据计算结果 e.g.游戏类都适合:完全信息博…...
2024/4/12 9:08:10 - 为什么选择D语言译为中文语言
中文编程语言在国内发展来说,由来已久,普及比较广泛的应当是易语言。易语言的出现,使得很多使用VB开发简单对话框式的Widwos桌面的局面发生变化,很多人开始使用易语言来完成。易语言公司也曾经尝试开发“易.飞扬”这样一门语言来使软件走向面向对象之路,不知道因为什么原因…...
2024/4/12 9:08:10 - 单元测试(白盒测试)
单元测试1.创建一个类:写两个方法;一个用于计算数字相加;一个用于计算数字相除;2.创建一个JUnit Test Case类:就是一个junit测试类,用于执行,创建过程如下:(图1:创建Junit Test Case类)(图2:红色方框中选择创建的类才可以点击next)(图3:点击next到此界面,选择…...
2024/4/12 9:08:10 - 101)PHP,多文件上传
就是在之前的单文件上传的基础上加了一个函数:1 <?php2 /**3 * 上传函数4 * @param $tmp_file $_FILES的五个信息,比如upload($_FILES(mingzi)5 * $_FILES里面的名字是你的对应的html代码中的上传文件的那个name6 * @return bool 失败返回fals…...
2024/4/19 12:50:04 - Java工程师学习指南(初级篇)
Java工程师学习指南初级篇最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很…...
2024/4/17 8:18:04 - 随机化算法(5) — 蒙特卡罗(Monte Carlo)算法
已出连载: 1.《随机化算法(1) — 随机数》 2.《随机化算法(2) — 数值概率算法》 3.《随机化算法(3) — 舍伍德(Sherwood)算法》 4.《随机化算法(4) — 拉斯维加斯(Las Vegas)算法》 正文: 蒙特卡罗法(Monte Carlo method)是以概率和统计的理论、方法为基础的一种计算…...
2024/4/18 4:50:58
最新文章
- HTTP/1.1,HTTP/2.0和HTTP/3.0 各版本协议的详解(2024-04-24)
1、HTTP介绍 HTTP 协议有多个版本,目前广泛使用的是 HTTP/1.1 和 HTTP/2,以及正在逐步推广的 HTTP/3。 HTTP/1.1:支持持久连接,允许多个请求/响应通过同一个 TCP 连接传输,减少了建立和关闭连接的消耗。 HTTP/2&#…...
2024/4/25 9:37:03 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 17、Lua 文件 I-O
Lua 文件 I/O Lua 文件 I/O简单模式完全模式 Lua 文件 I/O LuaI/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。 简单模式(simple model)拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件…...
2024/4/23 6:22:15 - 使用 Kafka 保证消息不丢失的策略及原理解析
✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 一、引言 二. 持久化存储 2.1持久化存储原理: 2.2使用示例: …...
2024/4/24 14:47:17 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/23 20:58:27 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/23 13:30:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/23 13:28:06 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/24 18:16:28 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/23 13:27:44 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/23 13:29:53 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/23 13:27:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/23 13:28:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/23 22:01:21 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/23 13:29:23 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/24 16:38:05 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/23 13:28:14 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/23 13:27:51 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/23 13:27:19 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57